应用程序阻止安装程序返回“退出代码”



遇到了一个奇怪的问题。我有安装程序,它工作得很好。我用PowerShell启动它,类似

$p = 'Start-Process $path -Verb "RunAs" -PassThru -Wait'
$p = Invoke-Expression $p

并获取其退出代码为$p.ExitCode通常情况下,一切都很完美。但我在CurStepChanged中添加了ShellExec,用于ssPostInstall步骤,以便在安装完成后启动额外的可执行文件。

ShellExec('', ExpandConstant('{app}DentalDesktopServerAgent.exe'), '', '', SW_HIDE, ewNoWait, ResultCode);

这样,它就不再返回退出代码这一行是带有和不带有退出代码的安装程序之间的唯一区别。由于PowerShell脚本正在等待退出代码,因此它只是挂起。

那么,为什么ShellExec会影响退出代码呢?有什么想法吗?

更新:问题似乎不在ShellExec,而是在启动的应用程序本身。应用程序本身不应该关闭(它是主安装应用程序的辅助应用程序)。我试着把它移到[运行],看起来,这个应用程序不会返回退出代码(这很明显)。但我不确定,这是否会导致安装程序不返回自己的退出代码,因为即使在将应用程序的启动转移到bat文件之后,当bat文件在应用程序启动后立即返回退出代码时,安装程序仍然不会返回退出代码,尽管它的所有[运行]条目都返回。

更新:收到其他信息。Exec的记录结果代码,用于启动应用程序。代码为259,意思是"申请仍在进行中"。它是否可能影响安装程序的结果代码?

我昨天没有很好地阅读你的问题。似乎是Invoke表达式给您带来了麻烦。尝试以正常方式启动安装程序(只需在批处理文件中说明其路径),然后检查PowerShell变量$LastExitCode。

我想你知道要与哪些退出代码进行比较:http://www.jrsoftware.org/ishelp/index.php?topic=setupexitcodes

最新更新