【问题标题】:Run wix immediate custom action with elevated privileges使用提升的权限运行 wix 即时自定义操作
【发布时间】:2017-09-08 10:44:07
【问题描述】:

我们正在根据此处提供的说明将 IIS 网站填充到下拉列表中:Bind IIS local websites in dropdown list of wix installation?

当从管理员命令提示符启动 msi 时,自定义操作有效,但是在没有管理员权限的情况下启动 msi 时会失败。在 CA 中将 Impersonate 值设置为 no 不会提升具有管理员权限的自定义操作执行。

有没有办法以管理员权限启动 msi?如何在具有提升访问权限的 UI 序列中立即执行自定义操作?

谢谢。

【问题讨论】:

  • 答案是您已经知道的答案 - MSI 本身必须通过提升启动,或者像您说的那样以管理员身份启动,或者使用提升然后调用 MsiInstallProduct 的程序或等效启动方法。
  • @PhilDW 如果在显示欢迎对话框之前没有以管理员权限启动 msi,是否有办法向用户显示警告消息?此外,当用户右键单击 msi 时,以管理员身份运行选项不可用。
  • 为什么该自定义操作首先需要管理员权限?
  • 如果 msi 没有以管理员权限启动,则向用户显示警告消息 -- 在 FragmentProduct 元素下添加 <Condition Message="Launch installer with admin rights!">Privileged</Condition> ... see also.
  • 当用户右键单击 msi 时,以管理员身份运行选项不可用 -- 将 .msi 包装在具有 <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> 清单的 .exe 中。对于该 .exe,您可以使用 7zip 创建 SFX 或使用 WiX Burn 例如。

标签: wix


【解决方案1】:

很遗憾,IIS API(.NET 中的 ServerManager 类)需要提升。在这种情况下,我要做的是为 MSI 创建一个引导程序并将其标记为需要提升。

【讨论】:

  • 有没有办法禁用刻录引导程序 UI 并且只显示 msi UI?
  • 遗憾的是,并非如此。请参阅此处的讨论:joyofsetup.com/tag/burn 单个 MSI 故事是 InstallShield 真正擅长的。我已经通过使用 MsiPackage@DisplayInternalUI 属性使用 Burn 完成了它,但它有点不太理想。刻录 UI 显示在后台。尽管如此,它还是完成了工作。
  • 当然,您的另一个选择是直接采用 Burn 并构建您的 MSI,而无需任何 UI。在客户引导程序应用程序中执行所有这些操作,并将选择作为安全的自定义公共属性传递给 MSI。我从来没有这样做过,因为我不再倾向于从事旗舰产品的工作。我倾向于从事许多小型的一次性项目,并且我优化每个项目的时间更少,而不是一个项目的一流 UI 体验。
  • 感谢 Christopher,现在创建带有自定义 UI 选项的自定义引导程序应用程序不是可行的解决方案,因为我们在 wix msi 项目中开发了许多自定义对话框。值得一提的是,我们认为这是对我们未来安装程序开发项目的学习。
【解决方案2】:

为了解决以管理员权限运行即时自定义操作的问题,我们必须将 msi 嵌入到 exe 中,并在 exe 未以管理员身份运行时显示错误消息。

ChilKat Zip 2 Secure Exe 创建软件用于创建 exe。 https://www.chilkatsoft.com/chilkatsfx.asp

在 wix 项目中添加了以下 sn-p:<Condition Message="Launch installer with admin rights!">Privileged</Condition>,以便在非管理员模式下运行时显示错误消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-20
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    相关资源
    最近更新 更多