Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]
R.i.m.s.k.y.
06-01-2011, 22:40
спасибо, ты очень добр »
Всегда пожалуйста, если я знаю ответ, то отвечаю на конкретные вопросы. Вопросы общего плана "Как сделать заипок" проходят мимо. Желающие получить код на халяву так же идут следом. Если есть вопросы - сначала почитай что в шапке, поверь, это уменьшит вопросы наполовину. Я сам начинал с шапки.
Что не правильно »
InitializeSetup - это сис.функция, если она вернет Фалсе* инсталлер закроется и не пикнет. Что-то возвращает Фалсе. Потыкай Result := True в разные места, примерно так.
[_Code]
var paramZ:boolean;
function InitializeSetup(): Boolean;
var i:integer; x,s, st:string;
begin
Result := True;
for i:=2 to ParamCount do
begin st:=Lowercase(ParamStr(i));
StringChangeEx(st, '/', '', True);
StringChangeEx(st, '\', '', True); StringChangeEx(st, '-', '', True);
case st of Lowercase('z') : paramZ := true;
Result := True;
end;
end;
end;
Такая фенька с расстановкой Result := True; у меня была на старой версии инно. тут Лександер страниц 5 назад выкладывал ультра инно с препроцессором и тп., на нем у меня без этих подстановок робит
И постарайся структурировать код, отступами, пустыми строчками, а то сплошной поток символов, самому будет легче разбираться.
* ничего что я по-английски ;)
R.i.m.s.k.y.,
после result:=true вообще не компилируется, пишет begin ему нужен, пишу в этом месте begin, а он мне, что result это unknown identifier. Поставил инно с препроцессором, которые выкладывал Лександр не работает.
а можете мне дать целую готовую командную строку rar? »
к сожалению с ним не знаком, т.к. rar'ом не пользуюсь, на мой взгляд 7z лучше.
но в более новых темах для XP под Висту и Севен, где прогрессбар цельный, он не отображается »
Возможно, спорить не буду, у меня нет таких тем, чтоб испробовать. В любом случае, мы используем системный прогрессбар.
расположить не над основным прогрессбаром, а над фейковым? Было бы резоннее. »
Как говорят, на вкус и цвет...
Можете сами нарисовать дополнительный статик и выводить в нём сообщения.
Добавление перевода в секцию [CustomMessages] проблему не решает. Сделать два языка в секции [Types] не получается »
Решается это двумя способами:
1. В каждом своём скрипте прописываете через [CustomMessages] перевод для каждого языка и уже указываете в [Types] свою переменную, т.е.:
[CustomMessages]
russian.CustomInstallation=Выборочная установка
english.CustomInstallation=Custom installation
[Types]
Name: custom; Description: {cm:CustomInstallation}; Flags: iscustom
2. Открываете языковой файл, допустим Russian.isl, распаложен в папке Languages, находите в конце файла секцию [CustomMessages] и добавляете в неё новой строкой
CustomInstallation=Выборочная установка
и так далее для каждого языка, т.е. для English.isl:
CustomInstallation=Custom installation
а в скрипте уже просто пишите
[Types]
Name: custom; Description: {cm:CustomInstallation}; Flags: iscustom
С помощью операторов while и do пробовал зациклить, но не могу условия сообразить. »
while True do
begin
GameAlreadyInstall := RegQueryStringValue({#ValueExists}, GamePath) and FileExists({#FileExists});
case GameAlreadyInstall of
True:
begin
// здесь что-то делаем
end;
False:
begin
// здесь что-то делаем
end;
end;
// if условие then
Break; // выходим из цикла
end;
вообще не компилируется »
[Code]
var
paramZ: Boolean;
function InitializeSetup(): Boolean;
var
i: Integer;
st: string;
begin
Result := True;
for i := 2 to ParamCount do
begin
st := Lowercase(ParamStr(i));
StringChangeEx(st, '/', '', True);
StringChangeEx(st, '\', '', True);
StringChangeEx(st, '-', '', True);
paramZ := st = 'z';
end;
end;
Serega,
а сейчас компилируется, установщик запускается, а если запустить с ключом /z, то будет тоже самое что и без него
а если запустить с ключом /z, то будет тоже самое что и без него »
Если вы просто скопировали из предыдущего поста, то естественно.
Я лишь подкорректировал код R.i.m.s.k.y., чтоб было понятней:
var
paramZ: Boolean;
function InitializeSetup(): Boolean;
var
i: Integer;
st: string;
begin
Result := True;
for i := 2 to ParamCount do
begin
st := Lowercase(ParamStr(i));
StringChangeEx(st, '/', '', True);
StringChangeEx(st, '\', '', True);
StringChangeEx(st, '-', '', True);
paramZ := st = 'z';
end;
if paramZ then
MsgBox('Ключ "z", присутствует в командной строке.', mbInformation, MB_OK);
end;
Sotonisto
07-01-2011, 11:37
Помогите пожалуйста, как убрать черную обводку?»
Ну вот тебе прозрачный текст :wink:
http://img17.imageshack.us/img17/4949/77989039.jpg
"Новая" версия инсталла для Fallout NV :)
Изменения: добавил чебоксы и музыку во время инсталляции, немного подправил скрипт.
СКАЧАТЬ АРХИВ (http://rghost.ru/3892733)
P.S.: Спасибо за помощь с чебоксами vint56'у с Ru-board.
Если вы просто скопировали из предыдущего поста, то естественно. »
а как именно должно быть ? я всего 2 дня изучаю Инно
я всего 2 дня изучаю Инно »
Нашёл на предыдущей странице ваш пост, с запуском файла x.exe, должно быть так:
[Files]
Source: C:\Documents and Settings\Administrator\Desktop\x.exe; Flags: dontcopy
[Code]
var
paramZ: Boolean;
function GetKeyParamStr(const key: string): Boolean;
{ функция вернёт True, если ключ key присутствует в командной строке }
var
i: Integer;
s, t: string;
begin
try
Result := False;
t := Lowercase(key);
for i := 2 to ParamCount do
begin
s := Lowercase(ParamStr(i));
if Pos(t, s) > 0 then
begin
StringChangeEx(s, '/', '', True);
StringChangeEx(s, '\', '', True);
StringChangeEx(s, '-', '', True);
Result := t = s;
end;
if Result then Break;
end;
finally
SetLength(s, 0);
SetLength(t, 0);
end;
end;
function InitializeSetup(): Boolean;
begin
Result := True;
paramZ := GetKeyParamStr('z');
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
res: Integer;
begin
if (CurStep = ssDone) and paramZ then
begin
ExtractTemporaryFile('x.exe');
Exec(ExpandConstant('{tmp}\x.exe'), '/z', ExpandConstant('{tmp}'), SW_HIDE, ewWaitUntilTerminated, res);
end;
end;
Serega,
:up получилось, спасибо тебе большое :jump2: . А что еще добавить, чтобы без ключа /z запустилась x.exe без каких либо ключей. Если его запуск прописать в [run], то он запустится и во время запуска с ключом /z. :dont-know
Sotonisto, Чуваккккк)))))) Спасибо тебе огромное))))
Очень благодарен))))))))
Только в этот скрипт можно как то вшить распаковку 7z архивов?
чтобы без ключа /z запустилась x.exe без каких либо ключей »
Тогда сделать надо так:
[Files]
Source: C:\Documents and Settings\Administrator\Desktop\x.exe; DestDir: {tmp}; Flags: ignoreversion
[Run]
Filename: {tmp}\x.exe; Parameters: {code:KeyStr}; WorkingDir: {tmp}; Flags: runhidden
[Code]
var
paramZ: Boolean;
function KeyStr(const s: string): string;
begin
case paramZ of
True : Result := '/z';
False: Result := '';
end;
end;
function GetKeyParamStr(const key: string): Boolean;
{ функция вернёт True, если ключ key присутствует в командной строке }
var
i: Integer;
s, t: string;
begin
try
Result := False;
t := Lowercase(key);
for i := 2 to ParamCount do
begin
s := Lowercase(ParamStr(i));
if Pos(t, s) > 0 then
begin
StringChangeEx(s, '/', '', True);
StringChangeEx(s, '\', '', True);
StringChangeEx(s, '-', '', True);
Result := t = s;
end;
if Result then Break;
end;
finally
SetLength(s, 0);
SetLength(t, 0);
end;
end;
function InitializeSetup(): Boolean;
begin
Result := True;
paramZ := GetKeyParamStr('z');
end;
а про флаги секции [Run] почитайте в Справке
Sotonisto
07-01-2011, 19:05
Только в этот скрипт можно как то вшить распаковку 7z архивов? »
Вот тебе cамый простой способ (не забываем [_Сode] изменить на [Сode] :wink:):
[Run]
Filename: {src}\1.exe; WorkingDir: {src}; Parameters: "-y -o""{app}"""; StatusMsg: Установка русификации...; Flags: waituntilterminated
[_Сode]
procedure CurStepChanged(CurStep: TSetupStep);
var
res:Integer;
app, arc, dest:string;
begin
If CurStep=ssPostInstall
then
begin
app:=ExpandConstant('{src}')+'\1.exe';
dest:=ExpandConstant('{app}');
Exec(app, 'x "'+ arc + '" -y -o"'+ dest + '"', '', SW_SHOWNORMAL, ewWaitUntilTerminated, res);
end;
end;
Или тебе нужен скрипт распаковки с отдельным прогресс-баром?
Gnom_aka_Lexander
07-01-2011, 22:10
Sotonisto, Есть способ еще проще: Пакуется 7z sfx с без параметров (ну, может сайлент-моде=1+ самоудаление после распаковки) и запускается из секции РАН безо всякого паскаля :)
Sotonisto
07-01-2011, 23:26
Лександер, да это первое что пришло в голову :happy:
Хотя 7zip уже не так популярен как раньше :) Сейчас всем FreeArc подавай :sleep:
Sotonisto,
Мне нужен с отдельным прогресс баром, чтоб потом этот архив удалился?
Можно такой?
Буду благодарен.
как сделать, чтобы команды в секции [Run] выполнялись после распаковки архива freearc, а не до него
как сделать, чтобы команды в секции [Run] выполнялись после распаковки архива freearc »
Переместить запускаемые файлы из секции [Run] в сам код, т.е. добавить их выполнение после распаковки архива.
Serega,
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then begin
StartInstall:= GetTickCount {время начала извлечения файлов}
WndHookID:= SetWindowsHookEx(WH_CALLWNDPROC, WrapCWPSTRUCTProc(@OnWndHook, 3), 0, GetCurrentThreadID); {установка SendMessage хука}
TimerID:= SetTimer(0, 0, 500 {полсекунды}, WrapTimerProc(@MyTimerProc, 4)); {установка таймера}
if not {#isFalse(SetupSetting("Uninstallable"))} then Status.count:= -1; // не считать файл unins000.exe end;
if CurStep = ssPostInstall then
begin
StartInstall:= GetTickCount {время начала распаковки}
UnPackError:= UnPack('{#Archives}')
if UnPackError <> 0 then begin // Error occured, uninstall it then
if not {#isFalse(SetupSetting("Uninstallable"))} then // деинсталляция разрешёна
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); // откат установки из-за ошибки unarc.dll
WizardForm.caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
SetTaskBarTitle(SetupMessage(msgErrorTitle)) end else
SetTaskBarTitle(SetupMessage(msgSetupAppTitle));
if CurStep=ssDone then Exec('{tmp}\setup.exe', sw_Hide, ewWaitUntilTerminated) //это я добавил
end; end;
в конце того что я добавил пишет invalid number of parameters
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.