在WiX中使用提升的权限执行CustomAction(同步或使用asyncWait)

时间:2015-09-01 13:35:07

标签: wix windows-installer

我们正在将安装工具包从NSIS更改为WiX,如果需要,我想使用CustomAction卸载旧版本的程序。为此,我需要在安装新组件之前使用提升的权限调用旧的卸载程序。

我在WXS文件中使用以下内容:

    <CustomAction Id="RemoveLegacyProduct" Directory="ProgramFilesFolder" ExeCommand="[PROP_LEGACYUNINSTALLER]" Execute="deferred" Impersonate="no" Return="asyncWait"/>

    <InstallExecuteSequence>
        <Custom Action="RemoveLegacyProduct" After="InstallInitialize"><![CDATA[PROP_LEGACYUNINSTALLER AND NOT REMOVE]]></Custom>
    </InstallExecuteSequence>

我目前遇到的问题是asyncWait似乎不起作用。我的旧卸载程序已启动,在完成之前,安装已经继续(它甚至在卸载程序完成之前结束)。

如何创建同步执行的自定义操作(或者至少安装等待操作完成)?或者有更好的方法来做我正在尝试的事情吗?

2 个答案:

答案 0 :(得分:0)

您需要return = ignore或检查安装是否完全等待卸载结束。 Asyncwait表示“在序列结束时等待”,因此它等待卸载在执行序列结束时完成,因此它与您的安装并行运行。

答案 1 :(得分:0)

我发现了问题,它与WiX无关,但旧的卸载程序产生了第二个进程然后终止。所以我的安装程序(正确)等待进程完成,但这是错误的过程。