执行需要提升一个自定义操作安装
问题描述:
后,我有以下WiX的片段:执行需要提升一个自定义操作安装
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1" />
<CustomAction Id="StartAppOnExit"
FileKey="Configurator.exe"
ExeCommand=""
Execute="immediate"
Impersonate="yes"
Return="asyncNoWait" />
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT"
Value="Configure initial settings" />
<UI>
<Publish Dialog="ExitDialog"
Control="Finish"
Order="1"
Event="DoAction"
Value="StartAppOnExit"
>WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
</UI>
基本上就退出对话框我显示一个对话框,上面写着:启动应用程序。注意:这个应用程序需要提升。这一切工作正常,除了一个障碍。如果启用了UAC,似乎MSI会用用户令牌剔除并剥离它的组,因此当它试图启动需要提升的应用程序时,它不再是一个选项。
我如何将这些字符串串起来工作?
我试图夹住Impersonate =“no”,但在这一点上工作已经太迟了。
答
UI序列作为受限用户运行,并通过调用CreateProcess启动应用程序。如果您将类似WixShellExec的内容与[WixShellExecTarget]一起使用,则它将像资源管理器一样运行,并在目标需要提升时显示UAC提示。或者你可以修改Configurator.exe以允许在没有提升特权的情况下启动,检测到这种情况并使用提升的权限重新启动。
例如,这应该工作:
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1" />
<CustomAction Id="StartAppOnExit" BinaryKey="WixCA" DllEntry="WixShellExec" Execute="immediate" Return="check" Impersonate="yes"/>
<Property Id="WixShellExecTarget" Value="[#Configurator.exe]"/>
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Configure initial settings" />
<UI>
<Publish Dialog="ExitDialog" Control="Finish" Order="1" Event="DoAction" Value="StartAppOnExit">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
</UI>
答
仅供参考,立即自定义操作始终是模拟的(即他们总是因为谁执行MSI用户运行)。
我喜欢Michael Urman关于如何让Configurator.exe处理海拔问题的想法。
我不知道你是否也可以在EXE中包含一个清单,以便操作系统知道总是需要提升。
关于您的疑问,问题是需要提升的组合,以及CreateProcess无法提升其创建的进程的事实。相反,CreateProcess返回ERROR_ELEVATION_REQUIRED,这是自定义代码可以处理的。 Windows Installer只报告错误。 – 2010-02-25 14:31:06