CustomAction以管理员身份运行

时间:2016-05-23 12:32:45

标签: permissions wix

我创建了一个自定义操作:

<CustomAction Id='AddEventLog' BinaryKey='CustomActionEventLog.dll' DllEntry='AddEventLog' Return="check" Execute="immediate"/>

安装序列

<Custom Action="AddEventLog" Before="InstallFinalize"  />

我的安装程序会弹出并说它需要管理员权限才能运行。我授予它。

InstallPrivileges='elevated' InstallScope='perMachine' AdminImage='yes'

但是,当它运行自定义操作时,它不起作用,因为它没有以管理员身份运行。

我甚至尝试将以下内容添加到app.manifest上我的自定义操作项目dll。它没有帮助。

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

我已经搜索了我可以在这个主题上找到的所有教程和论坛帖子。注意到了。

如果有人有任何更好的标签,请随意添加它们,我一整天都在苦苦挣扎。

更新澄清:

虽然我的customAction与EventLog一起使用,但我没有使用http://schemas.microsoft.com/wix/UtilExtension Util:EventSource。这是一个通用的问题,您甚至可以强制customAction以管理员身份运行吗?

2 个答案:

答案 0 :(得分:2)

免责声明,我之前没有这样做,而且我个人采取了使用wix扩展的其他方法,但您应该能够通过使用延迟执行来提升您的自定义操作的权限不冒充当前用户。因此,在您的情况下,Execute="immediate"就是您的阻碍。

<CustomAction Id="MyCustomAction" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no"/>


<!-- -or- -->


<CustomAction Id="MyCustomAction" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="commit" Return="check" Impersonate="no"/>

Source

答案 1 :(得分:2)

要以管理员权限运行任何自定义操作,您必须在安装的服务器部分期间运行自定义操作。即:它必须是延迟的自定义操作。否则,我认为你得到了一个consent.exe消息框,询问管理员权限。

所有msi安装都分为两部分,即安装的客户端和服务器部分。客户端部分是您可以看到UI并设置可确定安装位置和安装内容的属性的位置(必须将安装的服务器部分标记为安全才能访问它们)。服务器部分实际上是将文件放在系统上。这总是(??)需要管理员权限,因为它可以将内容写入程序文件和其他受保护的文件位置。

这些自定义操作必须标记为“Execute ='deferred'”,并且还必须在InstallaInitialize和InstallFinalize之间进行安排。

另外需要注意的是,如果要在自定义操作中使用安装中的任何属性的值,则需要使用单独的自定义操作,该操作使用特殊格式设置特殊命名的属性。然后,在自定义操作中获取属性值,查询会话对象的CustomActionData。你可以找到很多例子。