【问题标题】:Can you force MSI to be always admin?您可以强制 MSI 始终是管理员吗?
【发布时间】:2010-11-26 15:49:58
【问题描述】:

据我研究并询问其他人,似乎常规 MSI 在大多数时间都以受限用户身份运行,尤其是在 GUI 阶段。

但是无论如何,该应用程序在安装阶段都需要提升提示,我希望在 GUI 选择阶段执行的自定义操作期间拥有管理员权限。真的没有办法一开始就强制UAC提示吗?

此外,一些自定义操作也需要在 Active Directory 安装期间执行,如果 MSI 以访客或其他方式运行,也无法执行。

【问题讨论】:

    标签: windows-installer installation


    【解决方案1】:

    即使在运行提升的安装程序时,自定义操作仍可能在 Vista、Server 2008 和 Windows 7 上失败。这是因为它们通过模拟提升进程的用户来运行。

    需要完全权限且不使用每个用户信息的自定义操作应标记为无需模拟即可运行。这样它们就可以在本地系统帐户下运行,没有任何限制。

    【讨论】:

    • 确保它们在 InstallExecuteSequence 中运行,在 InstallInitialize 之后使用“msidbCustomActionTypeInScript”和“msidbCustomActionTypeNoImpersonate”标志。在 Wix 中,您可以将 Impersonate 标志设置为“否”。
    【解决方案2】:

    您可以从 bootstrapper 启动您的 MSI,其中包含嵌入的适当清单。

    【讨论】:

      【解决方案3】:

      在启动条件下使用Privileged 属性。

      【讨论】:

        【解决方案4】:

        在 GUI 阶段,它始终在非提升的用户上下文中运行。只有 InstallExecuteSequence 中的自定义操作在延迟执行模式下被提升。

        要解决此问题,您应该重新设计 MSI 或使用启动时请求提升的引导程序 (setup.exe)

        http://msdn.microsoft.com/en-us/magazine/cc163486.aspx#S7

        【讨论】:

        • 这是微软的超级蹩脚设计。如果不是用户单击 setup.msi 或 Active Directory 无人值守安装,我会说 setup.exe 没问题。
        • 您可以将参数(公共属性)从您的 setup.exe 传递给您的 MSI(例如 RUNFROMSETUP),并在未传递该属性时提醒用户(使用 LaunchCondition)。通过 AD 无人值守安装进行安装时,您可以在命令行中传递参数(我相信 MSI 将始终通过 SMS 提升运行)。这样用户在直接运行 MSI 时会收到一条消息,并且它也可以在无人值守的情况下执行。
        猜你喜欢
        • 2012-08-28
        • 1970-01-01
        • 2016-04-14
        • 2015-01-22
        • 2014-05-12
        • 1970-01-01
        • 1970-01-01
        • 2012-01-30
        • 2012-01-23
        相关资源
        最近更新 更多