我有一个CustomAction作为MSI的一部分。

它必须作为域帐户运行,该域帐户也是本地管理员帐户的成员。

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

在启用了UAC的Vista/2008上,如果关闭了NoImpersonate,它将以执行用户身份运行,但使用无特权 token ,并且无法访问本地资源(例如.installState)。 See UAC Architecture

任何人都知道一种方法

  • 强制MSI以提升的 token 运行,就像从提升的命令提示符下运行一样?
  • 强制CustomAction运行提升权限( list 中的requireAdministrator似乎不起作用)?
  • 找出是否启用了UAC,是否尚未提升UAC,是否警告或取消安装?
  • 最佳答案

    对于其他任何可疑的问题,请回答我自己的问题。

  • 您不能将 list 添加到MSI。您可以添加SETUP.EXE或bootstrapper来封装MSI,并使用requireAdministrator来表明这一点,但这在使用MSI方面有些不足。
  • 将 list 添加到CustomAction不起作用,因为它是从msiexec.exe运行的。

  • 我解决此问题的方法是将MSIUSEREALADMINDETECTION属性设置为1,这样Privileged条件实际上可以工作,并为Privileged添加启动条件,该启动条件会给出有关通过提升的命令提示符运行的错误消息,然后退出安装。

    这带来了令人高兴的副作用-当从提升的命令提示符下运行msi时,无论NoImpersonate设置如何,使用完整的Administrator token (而不是标准用户 token )的当前用户都将使用推迟的CustomActions来运行。

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

    [编辑]-我在这里输入脚本,因为VS没有lets you add the MSIUSEREALADMINDETECTION property的能力,所以Orca很痛苦。

    关于c# - 标记MSI,因此必须以提升的管理员帐户运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/304353/

    10-10 17:39
    查看更多