Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 6]
mifkys Check: CheckError пробовал такое добавлять? »
а что это такое? пробовал вставитЬ, говорит, что неизвестная функция
El Sanchez
24-06-2013, 12:33
а что это такое? пробовал вставитЬ, говорит, что неизвестная функция »
mifkys, потому как insombia не потрудился описать функцию CheckError и дать указание в каких строках необходимо вставить директиву Check. Да и не это вам нужно. Нужно проверять код возврата (http://www.info-zip.org/FAQ.html#error-codes) unzip.exe. Если он не равен 0, то установщик прерывает работу. В секции Run код возврата не проверить, поэтому распаковку нужно описать в секции Code. Допустим, распаковка идет в первую очередь, unzip.exe включен в состав установщика, архивы рядом с установщиком, тогда для распаковки подходит этап ssInstall:
procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
case CurStep of
ssInstall: begin
ExtractTemporaryFile('unzip.exe');
Exec(ExpandConstant('{tmp}\unzip.exe'), ExpandConstant('"{src}\arcname.zip"'), '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
if ResultCode <> 0 then Abort;
end;
end;
end;
insombia
24-06-2013, 12:33
del
еще такой вопрос. Можно ли во время установки после каждой записи в блоке [Run] выводить окно о запросе на продолжение установки, чтобы пользователь сам нажимал "Далее"
mifkys, потому как insombia не потрудился описать функцию CheckError и дать указание в каких строках необходимо вставить директиву Check. Да и не это вам нужно. Нужно проверять код возврата unzip.exe. Если он не равен 0, то установщик прерывает работу. В секции Run код возврата не проверить, поэтому распаковку нужно описать в секции Code. Допустим, распаковка идет в первую очередь, unzip.exe включен в состав установщика, архивы рядом с установщиком, тогда для распаковки подходит этап ssInstall: »
спасибо, попробую
El Sanchez
24-06-2013, 13:56
Можно ли во время установки после каждой записи в блоке [Run] выводить окно о запросе на продолжение установки, чтобы пользователь сам нажимал "Далее" »
mifkys, можно. Вопрос в том, что делать, если пользователь не захочет продолжать. В таком случае прервать работу установщика не удасться.
Вопрос в том, что делать, если пользователь не захочет продолжать. В таком случае прервать работу установщика не удасться. »
не подскажете как? Мне отменять не надо. Просто нужно контролировать продолжение установки в силу специфики запускаемых приложений.
Johny777
24-06-2013, 18:42
mifkys, не подскажете как? »
здесь уже через Check: функция с булев значением на выходе(),
если я правильно понимаю поставленную тобой задачу
Пример:
[Run]
Description: {cm:LaunchProgram, Half-Life}; Filename: {app}\half-life\Half-Life.exe; WorkingDir: {app}\half-life; Check: ConfirmRun('{cm:LaunchProgram, Half-Life}?');
Description: {cm:LaunchProgram, Half-Life Blue Shift}; Filename: {app}\half-life blue shift\Half-Life Blue Shift_unlocked.exe; WorkingDir: {app}\half-life blue shift; Check: ConfirmRun('{cm:LaunchProgram, Half-Life Blue Shift}?');
Description: {cm:LaunchProgram, Half-Life Opposing Force}; Filename: {app}\half-life opposing force\Half-Life Opposing Force.exe; WorkingDir: {app}\half-life opposing force; Check: ConfirmRun('{cm:LaunchProgram, Half-Life Opposing Force}?');
Description: {cm:LaunchProgram, Half-Life Decay}; Filename: {app}\half-life decay\Half-Life Decay.exe; WorkingDir: {app}\half-life decay; Check: ConfirmRun('{cm:LaunchProgram, Half-Life Decay}?');
[code ]
function ConfirmRun(const cMessage: String): Boolean;
begin
if MsgBox(ExpandConstant(cMessage), mbConfirmation, MB_YESNO) = IDYES then Result := True;
end;
В функции с выводом булев значения зарезервированная переменная Result инициализируется со значением False по дефолту.
Поэтому в данном случае True будет только если функция вывода диалогового окна винды вернёт число под константой IDYES, то бишь пользователь нажмёт "Да"
если Check получит True, то будет "выполнена строка", в данном случае запуск, если False то ничего не произойдёт,
те проверка производится перед действием описанным в строке до которой дошла очередь
Lex_from_Belarus
25-06-2013, 23:34
а как сдлеать так чтобы, если Win 32bit, то в секции [Run] выполнится одни, а если Win 64 bit, то другой?
Johny777
26-06-2013, 00:19
Lex_from_Belarus, Таким же макаром:
[Run]
// Will Run only on Win 64
Description: {cm:LaunchProgram, Half-Life}; Filename: {app}\half-life\Half-Life.exe; WorkingDir: {app}\half-life; Check: IsWin64();
// Will Run only on Win 32
Description: {cm:LaunchProgram, Half-Life Decay}; Filename: {app}\half-life decay\Half-Life Decay.exe; WorkingDir: {app}\half-life decay; Check: not IsWin64();
PS: Кстати подобный вопрос уже много раз был задан и получил ответ. Юзай поиск почаще!
Lex_from_Belarus
26-06-2013, 14:30
Johny777, да я так пробовал, у меня был вариант:
[Files]
Source: "e:\xxx\file_32.exe"; Check: full or medium or lite and not isWin64; DestDir: "{tmp}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "e:\xxx\file_64.exe"; Check: full or medium or lite and isWin64; DestDir: "{tmp}"; Flags: ignoreversion recursesubdirs createallsubdirs
[Run]
Filename: "{tmp}\file_32.exe"; Parameters: "/s"; Check: full or medium or lite; StatusMsg: "Установка file_32...";
Filename: "{tmp}\file_64.exe"; Parameters: "/s"; Check: full or medium or lite; StatusMsg: "Установка file_64...";
я сделал:
[Files]
Source: "e:\xxx\file_32.exe"; Check: full or medium or lite and not isWin64; DestDir: "{tmp}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "e:\xxx\file_64.exe"; Check: full or medium or lite and isWin64; DestDir: "{tmp}"; Flags: ignoreversion recursesubdirs createallsubdirs
[Run]
Filename: "{tmp}\file_32.exe"; Parameters: "/s"; Check: full or medium or lite and not isWin64; StatusMsg: "Установка file_32...";
Filename: "{tmp}\file_64.exe"; Parameters: "/s"; Check: full or medium or lite and isWin64; StatusMsg: "Установка file_64...";
full, medium, lite - это я так реализовал условия для установки и этот файл во все три варианта входит
но к сожалению и 32 и 64 на 64-ке установились
Habetdin
26-06-2013, 18:11
Lex_from_Belarus, попробуйте так:
Check: (full or medium or lite) and not isWin64;
Check: (full or medium or lite) and isWin64;
Lex_from_Belarus
26-06-2013, 19:03
Вот спасибо, а я даже и не подумал об этом :)
Dinvin4ester
27-06-2013, 16:55
http://i47.fastpic.ru/big/2013/0627/8c/de2c9075ed0ab41eda58cf406fa3598c.png
И снова я . Помогите решить эту проблему - http://sendfile.su/831604
insombia
27-06-2013, 17:38
Dinvin4ester та задолбали вы уже,читайте справку к исдону,или листайте страницы!!!
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\ВАШ АРХИВ'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
Dinvin4ester
27-06-2013, 19:31
insombia,
Вы хоть скрипт смотрели , просто я не могу найти .
Dinvin4ester, ПАПКА Modules\ISDone В САМОМ НИЗУ
Dinvin4ester
27-06-2013, 20:20
Да хз , а можно вообще убрать , архивы ведь не использую , а пользуюсь средствами инно .
Dinvin4ester, сделай так
//f not ISArcExtract ( 0, 0, ExpandConstant('{src}\ВАШ АРХИВ'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
Dinvin4ester
27-06-2013, 20:33
vint56,
Теперь ошибку выдает при компиляции - http://i48.fastpic.ru/big/2013/0627/af/78ecb8dc7cfbae1387d9bc215f61adaf.png . Ребята извините если что не так . Это последняя просьба )
Dinvin4ester, что ты закаментировал или правил
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC