代码之家  ›  专栏  ›  技术社区  ›  Kyle

程序执行的结果如何?

  •  0
  • Kyle  · 技术社区  · 14 年前

    使用wix,我想运行一个可执行文件(正在安装)并捕获返回值。我可以通过以下方式运行可执行文件:

    <CustomAction Id="UpgradeDBFromExe" FileKey="UpgradeDB.exe" ExeCommand="/update" Execute="deferred" Impersonate="no" Return="ignore"/>
    

    但我不知道如何捕获返回值。如果我将返回更改为“check”,那么在失败时,安装程序将回滚(而不是我希望发生的情况),而我希望稍后检查此结果(可以通过属性推测),并显示警告。我的想法是使用customAction脚本调用可执行文件并将结果存储为一个属性,但这看起来很混乱。有没有更好的办法?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Christopher Painter    14 年前

    我将假定此自定义操作对系统进行了更改,因此需要privs,并将其作为延迟/不模拟进行调度。正因为如此,而且它是一个正在耗尽进程的exe自定义操作,所以MSI不提供设置属性的方法。如果使用wix quiet-execute自定义操作模式,可以捕获stdout并将其记录下来,但仅此而已。如果使用的是dll自定义操作类型,则可以检查uilevel属性并选择弹出一个msi消息框,询问用户是否要继续,基于此,您可以返回成功或失败,但作为一个exe,您有点卡住了。

    另一种方法是在执行操作之后在UI序列中运行另一个自定义操作,该操作验证exe所做的操作,并设置成功/失败的属性,然后将一些UI从该操作中删除。我唯一担心的是,现在回滚安装还为时已晚,而且用户无论如何都不会阅读您在他们面前放置的内容。