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

Execute CustomAction with elevated privileges in WiX (synchronously or with asyncWait)

我们正在将我们的安装程序工具包从 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 似乎不起作用。我的旧卸载程序已启动,并且在完成之前安装已经继续(它甚至在卸载程序完成之前就结束了)。

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

您需要 return=忽略或检查安装以完全等到卸载结束。 Asyncwait 表示 "wait at sequence end",因此它等待卸载在执行序列结束时完成,因此它与您的安装并行运行。

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