11

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

这也无济于事。

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

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


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

4

3 回答 3

16

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

Visual Studio 安装程序部署

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

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

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

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

这不是理想的解决方案,但它足够接近我的原始要求,因此我对这个解决方案感到满意。

于 2012-07-24T09:59:02.770 回答
5

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

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

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

4)将条件设置为

管理员用户

. 5) 构建和安装。

于 2015-10-12T06:02:07.490 回答
0

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

当我的 EXE 文件名包含“更新”一词时,如何避免 UAC?

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

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

于 2012-07-16T00:29:37.880 回答