代码之家  ›  专栏  ›  技术社区  ›  Ryan

标记MSI,使其必须作为提升的管理员帐户运行

  •  24
  • Ryan  · 技术社区  · 16 年前

    我有一个自定义操作作为MSI的一部分。

    它不能使用NoImpersonate标志以NT Authority\System的身份运行自定义操作,因为这样它将无法访问网络资源。

    无特权 令牌,无法访问本地资源,如.installState。 See UAC Architecture

    有人知道这两种方法吗

    • 强制CustomAction运行提升(清单中的requireAdministrator似乎不起作用)?

    3 回复  |  直到 16 年前
        1
  •  34
  •   Community CDub    7 年前

    为其他可怜的s0d回答我自己的问题。

    • 无法将清单添加到MSI。您可以添加SETUP.EXE或bootstrapper来shell MSI,并使用requireAdministrator实现它,但这会破坏使用MSI的某些要点。

    MSIUSEREALADMINDETECTION 属性设置为1,以便特权条件实际起作用,并为添加启动条件 Privileged 这将给出有关通过提升的命令提示符运行的错误消息,然后退出安装。

    这有一个令人高兴的副作用——当从提升的命令提示符运行msi时,延迟的CustomActions将作为当前用户使用完整的管理员令牌(而不是标准用户令牌)运行,而不考虑 NoImpersonate 背景

    http://www.microsoft.com/downloads/details.aspx?FamilyID=2cd92e43-6cda-478a-9e3b-4f831e899433

    [编辑]-我把脚本放在这里了 lets you add the MSIUSEREALADMINDETECTION property

        2
  •  1
  •   Peter Crabtree    16 年前

    您还可以使用bootloader.exe文件,该文件可以使用ShellExecute和“RUNAS”作为动词(您可以使用7-zip创建引导加载程序,或者有许多其他方法)。

        3
  •  0
  •   Mohammadreza    6 年前

    您可以创建一个简单的 msi的sfx存档文件

    • 设置选项卡> :您的msi文件名

    • 高级选项卡>做记号 请求管理访问权限