Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]
No4noylis, ты не говорил что это на селект дир, значит я угадал :D правильно выражай свои мысли!
valyok666
30-06-2011, 19:23
да ну joner соединяет но потом приходиться потом переставлять всё местами(легче модулями пользоваться ИМХО
R.i.m.s.k.y.
30-06-2011, 22:10
т.е получается достаточно экспортировать ветку реестра, поменять значения на свои и засунуть в скрипт? И всего то? »
и отрезать лишнее
как на задний фон картинку поставить чтобы текст был поверх картинки как тут
http://radikal.ru/F/i044.radikal.ru/1005/65/a2b9534d854e.jpg.html
Господа, неужели никто так и не подскажет, возможен ли вариант, чтобы установщик можно было запустить всего несколько раз, а потом он выдавал сообщение, что он устал) и нужен другой? Ну или на крайний случай ограниченное время его службы, после чего он переставал бы работать или самоуничтожался. Если это нереально, просто скажите, что нет.
Gnom_aka_Lexander
01-07-2011, 09:36
TRMK, Впринцыпе можно, - делать, например запись в реестр, которая быдет говорить, инсталлу, сколько раз он уже был запущен и по достижении определенного количества запусков запретить дальнейшие запуски. чуть позже накидаю пример. но смысл - кто поумнее, будут искать эту запись и тупо удалять эту запись. Лаборатории дрВеба и Касперского пользуются похожим способом.
Лександер, ок, жду. От тех кто поумнее и так не спастись.)
Лександер, почему тебе не отправить пм?
45king, делаешь текст прозрачным, я ранее об этом писал, потом расширяешь боковую картинку
procedure InitializeWizard();
begin
ExtractTemporaryFile('картинка.bmp'); //картинка
WizardForm.WizardBitmapImage.Height:= ScaleX(260);// высота
WizardForm.WizardBitmapImage.Width:= ScaleX(260); //ширина картинки
end;
Rikill, я чет не нашел код текст прозрачным можишь показать где писал
No4noylis, читай форумы, гугли в конце концов, короче:
TNewStaticText не имеет свойство прозрачности , а статик текст во всём инсталляторе используется (по дефолту) , но есть альтернатива
Код:
procedure initializewizard();
var
label: TLabel;
begin
Label := TLabel.Create(WizardForm);
with Label do begin
AutoSize:=False; //авторазмер
SetBounds(ScaleX(100), ScaleY(219), ScaleX(200), ScaleY(17)); //размеры
OnClick:= @LabelClick; //что делает текст при нажатии, если не нужно удалить
Cursor:= CrHand; //курсор при наведении, если не нужно удалить
Transparent:=True; //а вот и главное, прозрачность
Font.Name:= 'Comic Sans MS' //шрифт если не нужно удалить
Font.Size:= 8;//размер текста если не нужно удалить
Font.Color:=$00FFFF; //цвет текста если не нужно удалить
Font.Style:=[fsItalic]; //стиль текста italic это курсив fsbold это жирный и тд. если не нужно удалить
Caption := 'наш текст';
Parent := WizardForm; //где находится
end;
end; »
Gnom_aka_Lexander
01-07-2011, 18:03
Лександер, почему тебе не отправить пм? »
Надоело уже думать за всех, отключил прием сообщений ото всех, кроме тех, кто есть в адресной книге.
TRMK, Пробуй:
; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!
; Версию указываеш здесь. проверку по дробной версии делать не стал - и так голова опухла уже.
#define VERSION 1
; Дает возможность ограничить количество запусков на одной машине
; на определенное количество раз. После чего можно запустить инсталл
; только либо следующей версии, либо предидущей.
; Количество запусков указать здесь:
#define COUNT 5
[Setup]
AppName=My Application
AppVersion={#VERSION}
OutputBaseFilename=MiProg
DefaultDirName={pf}\My Application
[Code]
var ver,n,m: String;
function InitializeSetup(): Boolean;
begin
if not (RegQueryStringValue(HKLM, 'SOFTWARE\Company\ProgramName','InsNum',n)
and RegQueryStringValue(HKLM, 'SOFTWARE\Company\ProgramName','InsVer',ver))then begin
ver:='{#VERSION}';
RegWriteStringValue(HKLM, 'SOFTWARE\Company\ProgramName','InsNum', '1');
RegWriteStringValue(HKLM, 'SOFTWARE\Company\ProgramName','InsVer', ver);
Result:=True;
end;
if RegQueryStringValue(HKLM, 'SOFTWARE\Company\ProgramName','InsVer',ver)then
if(StrToInt(ver)<>{#VERSION})then begin ver:='{#VERSION}';
RegWriteStringValue(HKLM, 'SOFTWARE\Company\ProgramName','InsNum', '1');
RegWriteStringValue(HKLM, 'SOFTWARE\Company\ProgramName','InsVer', ver);
Result:=True;
end;
if RegQueryStringValue(HKLM, 'SOFTWARE\Company\ProgramName','InsNum',n) then begin
m :=IntToStr(StrToInt(n)+1);
RegWriteStringValue(HKLM, 'SOFTWARE\Company\ProgramName','InsNum', m);
if (StrToInt(n)>{#COUNT}) then if (StrToInt(ver)={#VERSION})then begin
MsgBox( 'Error', mbinformation, mb_ok );
Result:=False;
end else begin
if ((StrToInt(n)<{#COUNT})or(StrToInt(ver)<>{#VERSION}))then Result:=True;
end;
end;
end; - количество запусков -5, после чего меняеш версию, и имееш еще пять запусков. Ветки реестра замаскируй как следует.
Еще один вариант от Шегората - проще и более оптимальный.
; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!
; Версию указываеш здесь. проверку по дробной версии делать не стал - и так голова опухла уже.
#define VERSION 1
; Дает возможность ограничить количество запусков на одной машине
; на определенное количество раз. После чего можно запустить инсталл
; только либо следующей ферсии, либо предидущей.
; Количество запусков указать здесь:
#define COUNT 5
[Setup]
AppName=My Application
AppVersion={#VERSION}
OutputBaseFilename=MiProg
DefaultDirName={pf}\My Application
[Code]
var ver,n,m: String;
function InitializeSetup(): Boolean;
var regv, regn, regmod: Cardinal;
begin
if not RegQueryDWordValue(HKLM, 'SOFTWARE\Company\ProgramName', 'InsVer', regv) then regv:=-1;
if not RegQueryDWordValue(HKLM, 'SOFTWARE\Company\ProgramName', 'InsNum', regn) then regn:=-1;
if (regv={#Version})and(regn>={#Count}) then begin
MsgBox( 'Error', mbinformation, mb_ok );
Result:= False;
Exit;
end;
if (regv=-1)or(regv<>{#Version}) then RegWriteDWordValue(HKLM, 'SOFTWARE\Company\ProgramName', 'InsVer', {#Version});
regmod:= regn+1;
if (regv<>{#Version})or(regn=-1) then regmod:=1; RegWriteDWordValue(HKLM, 'SOFTWARE\Company\ProgramName', 'InsNum', regmod);
Result:= True;
end;
Shegorat
01-07-2011, 22:09
TRMK
В дополнение к посту Лександер'а.
Добавил возможность удалить сетапник
; Версию указываеш здесь. проверку по дробной версии делать не стал - и так голова опухла уже.
#define VERSION "1"
; Дает возможность ограничить количество запусков на одной машине
; на определенное количество раз. После чего можно запустить инсталл
; только либо следующей ферсии, либо предидущей.
; Количество запусков указать здесь:
#define COUNT "5"
#define SelfDelete
[Setup]
AppName=My Application
AppVersion={#VERSION}
OutputBaseFilename=MiProg
DefaultDirName={pf}\My Application
[Code]
function InitializeSetup(): Boolean;
var regv, regn, regmod: Cardinal; Res: Integer;
begin
if not RegQueryDWordValue(HKLM, 'SOFTWARE\Company\ProgramName', 'InsVer', regv) then
regv:=-1;
if not RegQueryDWordValue(HKLM, 'SOFTWARE\Company\ProgramName', 'InsNum', regn) then
regn:=-1;
if (regv={#Version})and(regn>={#Count}) then begin
Result:= False;
MsgBox( 'Error', mbinformation, mb_ok);
#ifdef SelfDelete
SaveStringToFile(ExpandConstant('{userappdata}\sdel.bat'),
'@echo off'+#10#13+
':trydel'+#10#13+
'del "'+ExpandConstant('{srcexe}')+'"'+#10#13+
'if exist "'+ExpandConstant('{srcexe}')+'" goto trydel'+#10#13+
'del "'+ExpandConstant('{userappdata}\sdel.bat')+'"',
False);
Exec(ExpandConstant('{userappdata}\sdel.bat'), '', '', SW_HIDE, ewNoWait, Res);
#endif
Exit;
end;
if (regv=-1)or(regv<>{#Version}) then
RegWriteDWordValue(HKLM, 'SOFTWARE\Company\ProgramName', 'InsVer', {#Version});
regmod:= regn+1;
if (regv<>{#Version})or(regn=-1) then regmod:=1;
RegWriteDWordValue(HKLM, 'SOFTWARE\Company\ProgramName', 'InsNum', regmod);
Result:= True;
end;
Лександер и Shegorat, спасибо вам большое! Сегодня уже не смогу проверить, завтра только. Проверю, отблагодарю.)
No4noylis
02-07-2011, 10:01
Пожалуйста подскажите как делать такую панель????? http://i057.radikal.ru/1107/6a/4ec1d548c6de.jpg
No4noylis, статус панель http://narod.ru/disk/7844367001/STS_v.1.0.rar.html
No4noylis
02-07-2011, 13:57
No4noylis, статус панель http://narod.ru/disk/7844367001/STS_v.1.0.rar.html »
Не пойму как это к инсталлу прикрутить, нельзя ли пример готового скрипта????? Плиз!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
народ помогите вот я запаковал нужные файлы в FreeArc у меня получилось так название файла .arc потом поставил в скрипт код этот (http://forum.ru-board.com/topic.cgi?forum=5&topic=32025&start=147&limit=1&m=1) и получаеться я рядом с инстралятором бросай этот файл который запаковал и он его распаковывает а как мне сделать чтобы скрип запаковал этот файл например вот так game-1.bin и потом распаковал?
TRMK
В дополнение к посту Лександер'а.
Добавил возможность удалить сетапник »
Все работает на ура! Спасибо большое!
Еще вопрос созрел: А можно сделать так, чтобы установщик уничтожался или не запускался не зависимо от того, сколько раз он на определенном компе устанавливался, чтобы его лимит установок был определенное кол-во раз и все, потом он не мог запускаться? Или это уже не решаемо?
Gnom_aka_Lexander
02-07-2011, 20:15
А можно сделать так, чтобы установщик уничтожался или не запускался не зависимо от того, сколько раз он на определенном компе устанавливался, чтобы его лимит установок был определенное кол-во раз и все, потом он не мог запускаться? Или это уже не решаемо? »
Я так понял, что ты хочеш ограничить количество установок самого инсталла, не зависимо от компьютера? Теоретически, я преимерно представляю ,как такое сделать. Вот с реализацией... Тут нужны настоящие знатоки программирования... Варианты - либо инсталл при каждой установке пачит сам себя, не знаю, насколько это возможно. Либо он несет в себе набор для компиляции и уничтожает сам себя при каждой установки, в процессе которой компилится новый инсталл, со счетчиком оставшихся запусков на один меньше. Но подозреваю, что это оооочень геморойно.
Shegorat
02-07-2011, 20:34
Я так понял, что ты хочеш ограничить количество установок самого инсталла, не зависимо от компьютера? Теоретически, я преимерно представляю ,как такое сделать. Вот с реализацией... Тут нужны настоящие знатоки программирования... Варианты - либо инсталл при каждой установке пачит сам себя, не знаю, насколько это возможно. Либо он несет в себе набор для компиляции и уничтожает сам себя при каждой установки, в процессе которой компилится новый инсталл, со счетчиком оставшихся запусков на один меньше. Но подозреваю, что это оооочень геморойно. »
Первое возможно только если инсталлятор находится на жд либо на флешке, т.е там где он может себя перезаписать, точнее добавить часть данных в конец собственного файла. Второе очень геморройно, хотя и возможно, да и добавит к размеру инсталлятора десяток мегабайт, но опять таки только это возможно там где он может перезаписать файл.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC