Inno setup Inno安装程序测试安装程序退出代码

Inno setup Inno安装程序测试安装程序退出代码,inno-setup,Inno Setup,如何访问基于Inno Setup的安装程序的返回代码 例如,文档说明,如果“安装程序未能初始化”,退出代码将为1。在我的安装程序中,在某些情况下,代码从InitializeSetup()返回False。我在命令提示符下使用/silent标志运行安装程序。如果我echo%errorlevel%,我得到0 InitializeSetup()函数中代码的相关部分: 函数InitializeSetup():布尔值; 变量 结果代码:整数; 开始 {在静默模式下,将结果设置为false,以便在向导启动之前

如何访问基于Inno Setup的安装程序的返回代码

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

InitializeSetup()
函数中代码的相关部分:

函数InitializeSetup():布尔值;
变量
结果代码:整数;
开始
{在静默模式下,将结果设置为false,以便在向导启动之前退出}
{在安装程序无法继续时启动。}
如果是silent()那么
开始
{CompareVersion()根据}逻辑返回-1、0或1
{正在安装的版本是否小于、等于或大于}
{已安装的版本低于。如果没有现有版本,则返回0}
{安装。}
结果代码:=CompareVersion();
如果结果代码<0,则
开始
结果:=假;
出口
结束;
结束;
结果:=真;
结束;
在命令行中,我是如何运行和捕获返回值的:

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.

我遗漏了什么吗?

您的测试无效

当您从命令行执行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%

是的,当您从
InitializeSetup
返回
False
时,您将获得退出代码1。如果没有,请向我们显示运行安装程序和检查退出代码所使用的确切命令序列,包括完整的输出。@MartinPrikryl-编辑问题以获取更多详细信息。请查收。