【问题标题】:CustomAction run as administratorCustomAction 以管理员身份运行
【发布时间】:2016-09-20 08:13:27
【问题描述】:

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

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

安装顺序

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

我的安装程序确实弹出并说它需要管理员权限才能运行。我同意。

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

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

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

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

我已经搜索了我能找到的关于这个主题的所有教程和论坛帖子。注释已经起作用了。

如果有人对此有更好的标签,请随时添加它们,我整天都在为此苦苦挣扎。

更新说明:

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

【问题讨论】:

  • 您的自定义操作有什么作用?可能有一些 Wix 扩展可以用来回避您的问题(即stackoverflow.com/questions/58538/…)。
  • 添加和删除新的事件日志和事件源。对于 System.Diagnostics.EventLog,我无法找到现有的扩展。
  • 好的,虽然这不能直接回答您发布的问题,但我认为您正在寻找 util:EventSource (wixtoolset.org/documentation/manual/v3/xsd/util/…),您需要为框架提供正确的 EventLogMessages.dll您的目标版本,如何使用 NetFx 扩展的说明在这里 (stackoverflow.com/questions/12433883/…)
  • 幸运的是,它没有直接回答我的问题。只要用户从以管理员身份登录的 cmd 提示符执行 msi,我的自定义操作就可以工作,如果它是普通用户,即使安装程序提示访问,它也不起作用。同样,我没有使用 Util.EventSource 我正在使用需要具有管理员权限的自定义开发的自定义操作。有没有办法将权限发送到自定义操作,或者它可能与我在 installFinalize 之前运行它的事实有关。

标签: permissions wix


【解决方案1】:

免责声明,我以前没有这样做过,我个人会采取使用 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

【讨论】:

  • 不幸的是,没有一个 wix 扩展可以完全满足我的需求。我今天早些时候确实尝试过延期。我会尝试提交并让你知道。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-11-22
    • 2010-11-26
    • 2012-05-28
    • 2011-03-24
    • 2021-08-10
    • 1970-01-01
    • 2022-01-08
    • 2015-01-22
    • 2017-05-19
    相关资源
    最近更新 更多