PDA

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


Страниц : 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

mifkys
24-06-2013, 11:39
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

mifkys
24-06-2013, 12:43
еще такой вопрос. Можно ли во время установки после каждой записи в блоке [Run] выводить окно о запросе на продолжение установки, чтобы пользователь сам нажимал "Далее"

mifkys, потому как insombia не потрудился описать функцию CheckError и дать указание в каких строках необходимо вставить директиву Check. Да и не это вам нужно. Нужно проверять код возврата unzip.exe. Если он не равен 0, то установщик прерывает работу. В секции Run код возврата не проверить, поэтому распаковку нужно описать в секции Code. Допустим, распаковка идет в первую очередь, unzip.exe включен в состав установщика, архивы рядом с установщиком, тогда для распаковки подходит этап ssInstall: »
спасибо, попробую

El Sanchez
24-06-2013, 13:56
Можно ли во время установки после каждой записи в блоке [Run] выводить окно о запросе на продолжение установки, чтобы пользователь сам нажимал "Далее" »
mifkys, можно. Вопрос в том, что делать, если пользователь не захочет продолжать. В таком случае прервать работу установщика не удасться.

mifkys
24-06-2013, 17:08
Вопрос в том, что делать, если пользователь не захочет продолжать. В таком случае прервать работу установщика не удасться. »
не подскажете как? Мне отменять не надо. Просто нужно контролировать продолжение установки в силу специфики запускаемых приложений.

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,
Вы хоть скрипт смотрели , просто я не могу найти .

vint56
27-06-2013, 20:11
Dinvin4ester, ПАПКА Modules\ISDone В САМОМ НИЗУ

Dinvin4ester
27-06-2013, 20:20
Да хз , а можно вообще убрать , архивы ведь не использую , а пользуюсь средствами инно .

vint56
27-06-2013, 20:21
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 . Ребята извините если что не так . Это последняя просьба )

vint56
27-06-2013, 20:35
Dinvin4ester, что ты закаментировал или правил




© OSzone.net 2001-2012