2016-09-28 1 views
1

Как я могу получить код возврата программы установки на базе Inno Setup?Inno Setup Testing код выхода установщика

Например, в документации this указано, что код выхода будет 1, если «Setup не удалось инициализировать». В моем установщике в некоторых случаях код возвращает False от InitializeSetup(). Я запускаю установщик с флагом /silent в командной строке. Если я echo %errorlevel%, я получаю 0.

Соответствующая часть кода из функции InitializeSetup():

function InitializeSetup(): Boolean; 
var 
    ResultCode: Integer; 
begin 
    { In silent mode, set Result to false so as to exit before wizard is } 
    { launched in case setup cannot continue. } 
    if WizardSilent() then 
    begin 
    { CompareVersion() logically returns the -1, 0 or 1 based on } 
    { whether the version being installed is less than, equal to or greater } 
    { than version already installed. Returns 0 is there is no existing } 
    { installation. } 
    ResultCode := CompareVersion(); 
    if ResultCode < 0 then 
    begin 
     Result := False; 
     Exit; 
    end; 
    end; 

    Result := True; 
end; 

из командной строки, вот как я бегу и захватывая возвращаемого значения:

C:\VersionCheck>myinstaller.exe /Silent 

C:\VersionCheck>echo %errorlevel% 
0 

C:\VersionCheck> 

В файле журнала показано:

2016-09-29 08:05:11.259 Log opened. (Time zone: UTC-07:00) 
2016-09-29 08:05:11.259 Setup version: Inno Setup version 5.5.9 (u) 
2016-09-29 08:05:11.259 Original Setup EXE: C:\VersionCheck\myinstaller.exe 
2016-09-29 08:05:11.259 Setup command line: /SL5="$9051C,3445541,131584,C:\VersionCheck\myinstaller.exe" /Silent 
2016-09-29 08:05:11.259 Windows version: 6.3.9600 (NT platform: Yes) 
2016-09-29 08:05:11.259 64-bit Windows: Yes 
2016-09-29 08:05:11.259 Processor architecture: x64 
2016-09-29 08:05:11.259 User privileges: Administrative 
2016-09-29 08:05:11.259 64-bit install mode: Yes 
2016-09-29 08:05:11.259 Created temporary directory: C:\Users\ADMINI~1\AppData\Local\Temp\2\is-TQB2V.tmp 
2016-09-29 08:05:11.275 Installed version component : 3 
2016-09-29 08:05:11.275 Updating to version component : 0 
2016-09-29 08:05:11.275 This computer already has a more recent version (3.5.0.0) of XYZ. If you wantto downgrade to version 0.0.0.0 then uninstall and try again. Setup will exit. 
2016-09-29 08:05:11.275 InitializeSetup returned False; aborting. 
2016-09-29 08:05:11.275 Got EAbort exception. 
2016-09-29 08:05:11.275 Deinitializing Setup. 
2016-09-29 08:05:11.275 Log closed. 

Есть ли там som Что-то мне не хватает?

+0

Да, вы получите код выхода 1, когда вы возвращаетесь '' false' из InitializeSetup'. Если вы этого не сделаете, покажите нам точную последовательность команд, которую вы используете для запуска установщика, и проверьте код выхода, включая полный вывод. –

+0

@MartinPrikryl - отредактировал вопрос, чтобы получить более подробную информацию. Пожалуйста, проверьте. – Anand

ответ

1

Ваш тест недействителен.

Когда вы запускаете приложение GUI (установщик) из командной строки, консоль не ждет завершения программы. Таким образом, %errorlevel% не может содержать код выхода приложения (установщик), поскольку он еще не завершен в то время.

В этом случае %errorlevel% отражает ошибки (но не успевает) только для запуска приложения.

Также обратите внимание, что режим молчания на самом деле не влияет на это. Несимметричный режим ведет себя одинаково.


Но если вы сложите точно такие же команды в пакетный файл (.bat), он будет работать. Поскольку пакетный файл ожидает завершения работы приложения.

C:\VersionCheck>test.bat 

C:\VersionCheck>myinstaller.exe /Silent 

C:\VersionCheck>echo 1 
1 
C:\VersionCheck> 

Если test.bat содержит свои две команды:

myinstaller.exe /Silent 
echo %errorlevel% 
+0

Спасибо за быстрый ответ. Оно работает :) – Anand