【问题标题】:VS2010 Setup Project - Run As AdministratorVS2010 安装项目 - 以管理员身份运行
【发布时间】:2012-07-14 20:30:12
【问题描述】:

我有一个 VS2010 解决方案,其中包含 2 个项目 - 一个 .NET 4 程序和一个安装程序。安装程序只是一个带有先决条件的简单安装项目 - .NET Framework 4。

问题是我需要安装程序 setup.exe 始终以管理员身份运行,否则安装程序将在 UAC 下失败。 (默认情况下它不会提示我提升权限。)

我尝试在 setup.exe 旁边放置一个 setup.exe.manifest(如下所示)以强制它以管理员身份运行,但不幸的是 Windows 忽略了它,很可能是因为已经存在 另一个清单文件嵌入在 setup.exe 本身中,它被设置为 asInvoker 而不是 requireAdministrator

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

我还尝试添加具有以下属性的启动条件:-

(name): Elevated
Condition: Privileged
Message: This installation requires elevated permissions to continue.

这也无济于事。

那么任何人都可以解释如何解决这个问题吗?

附:我知道您可以通过更改 setup.exe 的兼容性设置来解决此问题,但这是一个手动过程,无法通过自动构建过程 (TFS) 完成。另外,提供一个带有兼容性设置的快捷方式也很奇怪,因为没有人在同一个文件夹中提供 setup.exe 的快捷方式,更不用说快捷方式需要事先知道 setup.exe 的确切路径。 (安装包将被移动。)


编辑:顺便说一句,我的问题与here 描述的问题完全相同。但不幸的是,没有为那个人找到解决方案,提问者只是求助于他的客户手动使用以管理员身份运行,这是我试图避免的。

【问题讨论】:

    标签: visual-studio-2010 installation uac


    【解决方案1】:

    正如 Frank 所指出的,Visual Studio 安装项目的行为记录在 Microsoft 的网站上:

    Visual Studio Installer Deployment

    换句话说,由 VS008 和 VS2010 生成的setup.exe始终在不提示权限提升的情况下运行(除非您使用“以管理员身份运行”显式运行它>' 上下文菜单选项)。它依次将每个必备组件以及主 MSI 安装程序作为单独的进程运行,并提示任何需要它的特权提升。这意味着可能会有多个海拔提示。

    但是,由于某些原因,这并不总是有效。就我而言,当我运行 setup.exe 时,根本不会出现 .NET Framework 先决条件的提升提示。 但是如果我直接运行必备安装程序,就会出现提示。这意味着问题不在于必备组件,而在于 setup.exe 或 Windows 本身。

    解决方案(或解决方法)?根据上面链接中的 Microsoft,我们可以强制 setup.exe 启动每个必备组件和主 MSI 以运行 提升提示。为此,我们需要手动编辑设置项目文件(.vdproj)并将以下RequiresElevation值更改为TRUE,如下所示:

    "MsiBootstrapper"
    {
        "LangId" = "3:1033"
        "RequiresElevation" = "11:TRUE"
    }
    

    这不是理想的解决方案,但已经足够接近我最初的需求,所以我对这个解决方案很满意。

    【讨论】:

    • 打开 .vdproj 文件后,我究竟要在哪里设置这个属性??
    • 没问题我找到了,右键用notpad打开。
    • 我在 Windows 7 64 位俄文版中遇到了一个错误,合并模块的安装路径不正确。如果 setup.exe 以管理员权限启动,则相同的安装工作正常。我试图更改设置行为以立即请求提升的权限 - 使用“RequiresElevation”更改,但不幸的是,这个解决方案对我来说不起作用。 (因此立即请求提升,但它对我的问题没有帮助)
    【解决方案2】:

    如果您想在管理员模式下运行 MSI,方法如下: 1)打开你的安装项目,查看->启动条件。​​

    2) 右键单击​​启动条件,然后在您的启动条件中添加一个新条件。

    3) 右键单击​​条件,选择属性窗口。

    4) 设置条件为

    管理员用户

    。 5) 构建和安装。

    【讨论】:

    • 这对我有用。看起来我们也可以使用Privileged - "安装程序仅在用户是管理员时设置 AdminUser 属性。如果用户是管理员,安装程序将设置 Privileged 属性,或者如果策略允许用户以提升的权限安装特权” [docs.microsoft.com/en-us/windows/win32/msi/adminuser]
    【解决方案3】:

    我认为您的问题与安装程序的名称有关。这个链接

    How do I avoid UAC when my EXE file name contains the word "update"?

    表示如果名称中包含 Update 或 Setup,则 UAC 将启动。

    您可以将您的安装程序重命名为其他名称吗?

    【讨论】:

    • 但这就是我想要的!我希望 UAC 启动,但它没有。此外,名称“setup.exe”是 Visual Studio 自动生成的,无法更改。
    • 可能有用的背景:How UAC WorksVisual Studio Installer Deployment - 尤其是应用程序提升部分
    • 谢谢弗兰克,您的第二个链接实际上提供了我需要的信息!如果您可以基于此提供正确的答案(关于 MsiBootstrapper -> RequiresElevation = True 的部分),我将接受您的答案。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 2022-01-23
    • 2012-07-11
    • 2011-09-01
    • 1970-01-01
    • 2018-06-25
    相关资源
    最近更新 更多