PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 [106] 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188

Rikill
30-06-2011, 19:09
No4noylis, ты не говорил что это на селект дир, значит я угадал :D правильно выражай свои мысли!

valyok666
30-06-2011, 19:23
да ну joner соединяет но потом приходиться потом переставлять всё местами(легче модулями пользоваться ИМХО

R.i.m.s.k.y.
30-06-2011, 22:10
т.е получается достаточно экспортировать ветку реестра, поменять значения на свои и засунуть в скрипт? И всего то? »
и отрезать лишнее

45king
01-07-2011, 02:41
как на задний фон картинку поставить чтобы текст был поверх картинки как тут
http://radikal.ru/F/i044.radikal.ru/1005/65/a2b9534d854e.jpg.html

TRMK
01-07-2011, 03:33
Господа, неужели никто так и не подскажет, возможен ли вариант, чтобы установщик можно было запустить всего несколько раз, а потом он выдавал сообщение, что он устал) и нужен другой? Ну или на крайний случай ограниченное время его службы, после чего он переставал бы работать или самоуничтожался. Если это нереально, просто скажите, что нет.

Gnom_aka_Lexander
01-07-2011, 09:36
TRMK, Впринцыпе можно, - делать, например запись в реестр, которая быдет говорить, инсталлу, сколько раз он уже был запущен и по достижении определенного количества запусков запретить дальнейшие запуски. чуть позже накидаю пример. но смысл - кто поумнее, будут искать эту запись и тупо удалять эту запись. Лаборатории дрВеба и Касперского пользуются похожим способом.

TRMK
01-07-2011, 13:55
Лександер, ок, жду. От тех кто поумнее и так не спастись.)

Rikill
01-07-2011, 14:53
Лександер, почему тебе не отправить пм?
45king, делаешь текст прозрачным, я ранее об этом писал, потом расширяешь боковую картинку
procedure InitializeWizard();
begin
ExtractTemporaryFile('картинка.bmp'); //картинка
WizardForm.WizardBitmapImage.Height:= ScaleX(260);// высота
WizardForm.WizardBitmapImage.Width:= ScaleX(260); //ширина картинки
end;

45king
01-07-2011, 16:33
Rikill, я чет не нашел код текст прозрачным можишь показать где писал

Rikill
01-07-2011, 16:46
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;

TRMK
02-07-2011, 02:00
Лександер и Shegorat, спасибо вам большое! Сегодня уже не смогу проверить, завтра только. Проверю, отблагодарю.)

No4noylis
02-07-2011, 10:01
Пожалуйста подскажите как делать такую панель????? http://i057.radikal.ru/1107/6a/4ec1d548c6de.jpg

Rikill
02-07-2011, 12:36
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 »
Не пойму как это к инсталлу прикрутить, нельзя ли пример готового скрипта????? Плиз!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

45king
02-07-2011, 14:30
народ помогите вот я запаковал нужные файлы в FreeArc у меня получилось так название файла .arc потом поставил в скрипт код этот (http://forum.ru-board.com/topic.cgi?forum=5&topic=32025&start=147&limit=1&m=1) и получаеться я рядом с инстралятором бросай этот файл который запаковал и он его распаковывает а как мне сделать чтобы скрип запаковал этот файл например вот так game-1.bin и потом распаковал?

TRMK
02-07-2011, 19:47
TRMK
В дополнение к посту Лександер'а.
Добавил возможность удалить сетапник »
Все работает на ура! Спасибо большое!
Еще вопрос созрел: А можно сделать так, чтобы установщик уничтожался или не запускался не зависимо от того, сколько раз он на определенном компе устанавливался, чтобы его лимит установок был определенное кол-во раз и все, потом он не мог запускаться? Или это уже не решаемо?

Gnom_aka_Lexander
02-07-2011, 20:15
А можно сделать так, чтобы установщик уничтожался или не запускался не зависимо от того, сколько раз он на определенном компе устанавливался, чтобы его лимит установок был определенное кол-во раз и все, потом он не мог запускаться? Или это уже не решаемо? »
Я так понял, что ты хочеш ограничить количество установок самого инсталла, не зависимо от компьютера? Теоретически, я преимерно представляю ,как такое сделать. Вот с реализацией... Тут нужны настоящие знатоки программирования... Варианты - либо инсталл при каждой установке пачит сам себя, не знаю, насколько это возможно. Либо он несет в себе набор для компиляции и уничтожает сам себя при каждой установки, в процессе которой компилится новый инсталл, со счетчиком оставшихся запусков на один меньше. Но подозреваю, что это оооочень геморойно.

Shegorat
02-07-2011, 20:34
Я так понял, что ты хочеш ограничить количество установок самого инсталла, не зависимо от компьютера? Теоретически, я преимерно представляю ,как такое сделать. Вот с реализацией... Тут нужны настоящие знатоки программирования... Варианты - либо инсталл при каждой установке пачит сам себя, не знаю, насколько это возможно. Либо он несет в себе набор для компиляции и уничтожает сам себя при каждой установки, в процессе которой компилится новый инсталл, со счетчиком оставшихся запусков на один меньше. Но подозреваю, что это оооочень геморойно. »
Первое возможно только если инсталлятор находится на жд либо на флешке, т.е там где он может себя перезаписать, точнее добавить часть данных в конец собственного файла. Второе очень геморройно, хотя и возможно, да и добавит к размеру инсталлятора десяток мегабайт, но опять таки только это возможно там где он может перезаписать файл.




© OSzone.net 2001-2012