2012-07-16 95 views
8

我有一个VS2010解决方案,其中包含2个项目 - 一个.NET 4程序和一个安装程序。安装程序只是一个带有必备条件的简单安装项目 - .NET Framework 4.VS2010安装项目 - 以管理员身份运行

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

我试图把一个setup.exe.manifest(如下图所示)旁边的setup.exe以迫使它以管理员身份运行,但不幸的是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如出一辙。但不幸的是,没有找到解决方案,那个人和提问者只是要求他的客户手动使用以管理员身份运行,这正是我想要避免的。

回答

12

正如弗兰克指出,在Visual Studio安装项目的行为是在微软的网站上记载:

Visual Studio Installer Deployment

换句话说,通过VS008和VS2010产生的setup.exe总是可以不运行提示权限提升(除非您使用'以管理员身份运行'上下文菜单选项明确运行它)。它依次运行每个必备组件以及主MSI安装程序作为单独的进程,并提示需要它的任何人进行权限提升。这意味着可能会有多个提升提示。

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

解决方案(或解决方法)?根据微软在上面的链接,我们可以通过强制setup.exe来启动每个必备组件和主MSI以及海拔提示运行。要做到这一点,我们需要手动编辑安装项目文件(.vdproj)及以下RequiresElevation值更改为TRUE,如下图所示:

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

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

+0

打开.vdproj文件后,我到底需要设置此属性? – jammy 2014-12-02 06:11:37

+0

没问题,我发现它,它是右键单击和openwith notpad。 – jammy 2014-12-02 08:49:03

+0

我有一个Windows 7,64位,俄语版本的错误,其中合并模块的安装路径不正确。如果使用管理员权限启动setup.exe,则相同的安装会正常工作。我试图改变安装行为以立即请求提升特权 - 使用“RequiresElevation”篡改,但不幸的是对于我来说这个解决方案并不起作用。 (所以立即要求提升,但它并没有帮助我解决我的问题) – TarmoPikaro 2016-09-14 11:29:10

0

我认为你的问题是关于安装程序的名称。此链接

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

说,如果名下有更新或安装在里面,那么UAC将在踢。

你能你的安装程序重命名为别的东西吗?

+1

但这就是我想要的!我想UAC踢,但它没有。此外,名称'setup.exe'由Visual Studio自动生成,不能更改。 – 2012-07-16 01:41:17

+2

潜在有用的背景:[UAC如何工作](http://msdn.microsoft.com/en-us/library/aa905330.aspx#wvduac_topic3)和[Visual Studio安装程序部署](http://msdn.microsoft.com /en-us/library/2kt85ked.aspx) - 特别是应用高程部分 – 2012-07-16 04:35:16

+0

谢谢弗兰克,你的第二个链接实际上提供了我需要的信息!如果你可以提供一个正确的答案(该部分讨论MsiBootstrapper - > RequiresElevation = True),我会接受你的答案。 :) – 2012-07-17 11:43:43

2

如果您想以管理员模式运行MSI,请按以下步骤操作:1)打开您的安装项目,查看 - >启动条件。 2)右键单击启动条件,然后在启动条件中添加一个新条件。

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

4)设置条件来

ADMINUSER

。 5)构建和安装。