VS2010安装项目 - 以管理员身份运行

时间:2012-07-16 00:12:09

标签: visual-studio-2010 installation uac

我有一个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.

这也没有做任何事情。

那么有人可以说明如何解决这个问题吗?

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


编辑顺便说一下,我的问题与描述here的问题完全相同。但不幸的是,没有找到该人的解决方案,提问者只是要求他的客户手动使用以管理员身份运行,这就是我想要避免的。

3 个答案:

答案 0 :(得分:12)

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

Visual Studio Installer Deployment

换句话说,VS008和VS2010生成的setup.exe始终运行而不会提示权限提升(除非您使用'运行以管理员<显式运行< / em>'上下文菜单选项)。它反过来将每个必备组件以及主MSI安装程序作为单独的进程运行,并提示任何需要它的任何人的权限提升。这意味着可能会有多个提升提示。

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

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

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

这不是理想的解决方案,但它足够接近我原来的要求,所以我对这个解决方案很满意。

答案 1 :(得分:3)

如果你想在管理模式下运行MSI就是这样, 1)打开设置项目,查看 - &gt;启动条件。​​

2)右键单击Launch Conditions,然后在Launch Conditions中添加一个新条件。

3)右键单击Condition,选择Properties Window。

4)将条件设置为

  

ADMINUSER

。 5)构建和安装。

答案 2 :(得分:0)

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

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

表示如果名称中包含更新或设置,则UAC将启动。

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