我们正在将安装工具包从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
似乎不起作用。我的旧卸载程序已启动,在完成之前,安装已经继续(它甚至在卸载程序完成之前结束)。
如何创建同步执行的自定义操作(或者至少安装等待操作完成)?或者有更好的方法来做我正在尝试的事情吗?
答案 0 :(得分:0)
您需要return = ignore或检查安装是否完全等待卸载结束。 Asyncwait表示“在序列结束时等待”,因此它等待卸载在执行序列结束时完成,因此它与您的安装并行运行。
答案 1 :(得分:0)
我发现了问题,它与WiX无关,但旧的卸载程序产生了第二个进程然后终止。所以我的安装程序(正确)等待进程完成,但这是错误的过程。