我试图弄清楚如何从提升的 WiX 安装设置程序运行自定义操作。WiX 生成的 msi 文件由 DotNetInstaller 执行。
在 WiX 中,我有一个 Package 部分,其中 InstallScope 设置为 perMachine 和这个自定义操作:
<CustomAction Id='RegisterPlugin' FileKey='RegisterPluginExe' ExeCommand='' Return='asyncNoWait' Impersonate='yes' />
<InstallExecuteSequence>
<Custom Action='RegisterPlugin' After='InstallFinalize'>NOT Installed</Custom>
</InstallExecuteSequence>
Impersonate 设置为 yes 应该以运行 DNI 引导程序的用户身份运行操作 exe。自定义操作应该读取用户 AppData 目录中的文件,使用 System.Windows.Forms.Application.LocalUserAppDataPath 获得的值,但使用的目录是错误的,因为是管理员用户之一。
我尝试使用清单来运行未提升的 DNI,但问题仍然存在。如果我直接运行 msi,它会正确执行一些需要管理权限的注册表操作,而自定义操作按预期运行。
编辑:查看任务管理器,我可以看到,如果从 DNI 执行 msi,则在启动 msi 时用户将成为管理员。如果我直接运行 msi,则用户始终相同,即使在系统目录上安装文件期间也是如此。在这种情况下,似乎改变的不是身份,而是特权。
有任何想法吗?
谢谢, 斯泰尼奥