2016-09-28 206 views
1

如何访问基于Inno Setup的安装程序的返回代码?Inno Setup安装程序测试安装程序退出代码

例如,this文档说如果“安装程序无法初始化”,则退出代码将为1。在我的安装程序中,在某些情况下,代码从InitializeSetup()返回False。我在命令提示符下使用/silent标志运行安装程序。如果我echo %errorlevel%,我得到的代码从InitializeSetup()功能0

相关部分:

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. 

是否有索姆我错过了什么?

+0

是的,你得到的退出代码1,当您从'InitializeSetup'返回'FALSE'。如果您不这样做,请向我们展示您用于运行安装程序的确切命令序列,并检查退出代码,包括完整的输出。 –

+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

相关问题