使用Wix,我想运行一个可执行文件(正在安装)并捕获返回值。通过以下方式运行可执行文件没有问题:
<CustomAction Id="UpgradeDBFromExe" FileKey="UpgradeDB.exe" ExeCommand="/update" Execute="deferred" Impersonate="no" Return="ignore"/>
但我不确定如何捕获返回值。如果我将返回更改为'check'然后在失败时安装程序回滚(不是我想要发生的),而是我想稍后检查此结果(可通过属性推测)并显示警告。我的想法是使用CustomAction脚本来调用可执行文件并将结果存储为属性,但这看起来很混乱。有没有更好的方法呢?
答案 0 :(得分:2)
我将假设此CustomAction对系统进行了更改,因此需要privs并且计划为延迟/没有模拟。因此,以及它是一个EXE自定义操作正在耗尽进程的事实,MSI没有提供设置属性的方法。如果您使用WiX安静执行自定义操作模式,您可以捕获标准输出并记录它,但这是关于它。如果您使用了DLL自定义操作类型,则可以检查UILevel属性,并可选择弹出MSI MessageBox,询问用户是否要继续,并且基于此可以返回成功或失败,但作为EXE,您有点卡住。
另一种方法是在执行操作之后在UI序列中运行另一个自定义操作,该操作验证EXE执行的操作并设置成功/失败的属性,然后驱动一些UI。我唯一担心的是,将安装回滚已经太晚了,用户往往不会阅读你在他们面前放的东西。