如何从VS2010安装项目中生成setup.exe请求管理员权限?

时间:2011-09-16 11:21:00

标签: visual-studio-2010 installer windows-installer uac setup-deployment

我有一个问题,我猜这个问题很难解决......但是呃。

我正在使用VS2010部署.NET应用程序。我有一个C#Windows Forms项目和一个部署项目。我需要安装程序以管理员权限运行,因为已为所有用户安装了应用程序,并且已进入注册表的条目。

启动setup.exe时,系统不会提示我提升权限。安装程序将启动并建议安装到Program Files(x86),这很好。单击下一步后,安装程序将运行并完成成功消息。这基本上是谎言,因为它没有成功安装。相反,它将应用程序exe直接放到C:\。

如何让安装程序请求管理员权限。或者我是否必须依靠我的客户右键单击设置并选择“以管理员身份运行”,这非常容易出错?

有关我的设置的说明

  • 在安装项目的文件系统视图中,我添加了(除其他外)“project01的主输出(活动)”和“从project01(活动)构建输出到”应用程序文件夹“。我还添加了一个快捷方式”主输出“进入”用户程序菜单\ CompanyName \ ProgramName“。
  • 在注册表视图中,我向HKEY_CLASSES_ROOT添加了一个条目,因为我需要注册一个url处理程序。

我还修改了设置的设置:我将InstallAllUsers设置为True,因为它应该这样做。

当我通过双击(或从项目的上下文菜单中选择Install)构建并启动setup.exe时,我总是得到相同的结果:安装程序在没有要求管理员权限的情况下运行,请求安装位置(我保留默认的C:\ Program Files(x86)\ Company \ ProgramName),然后单击“下一步”继续。因此,exe直接放在C:\中,当然创建的快捷方式指向Nirvana。

如果我手动运行setup.exe,管理员工作正常。但这不可能成为可行的方法。

那么如何告诉设置始终以Admin身份运行?

3 个答案:

答案 0 :(得分:3)

我认为这是一个非常有效的问题,是一个真正的问题,并且有一个实际的解释。

我最近遇到过这个问题。在我的情况下,原因是通过GPO在计算机上设置了AlwaysInstallElevated策略。策略在每台计算机策略中设置为1,在每用户策略中设置为0。可以手动设置这些策略以重现它对MSI安装程序的影响

使用msexec /log install.log /i Deploy.msi,我有一个设置日志,里面有字符串,如下所示:

MSI (s) (A4:8C) [13:00:42:885]: Ignoring disallowed property TARGETDIR
MSI (s) (A4:8C) [13:00:42:885]: Ignoring disallowed property VSDNETURLMSG
MSI (s) (A4:8C) [13:00:42:885]: Ignoring disallowed property VSDNETMSG

似乎Visual Studio没有正确设置MSI中的SecureCustomProperties,并且需要进行某种类型的后期处理。我认为转移到WiX可能是一个更好的长期解决方案。

我发现blog post on MSDN帮我找到了这个问题的根本原因。

答案 1 :(得分:1)

我遇到了和你一样的问题,并找到了一个足够好的解决方案。所以它也可能对你有用。解决方案记录在这里:

VS2010 Setup Project - Run As Administrator

我将在此简要重复解决方案。基本上,您需要手动编辑安装项目文件(.vdproj)和以下属性为TRUE:

"MsiBootstrapper"
{
    ...
    "RequiresElevation" = "11:TRUE"
}

答案 2 :(得分:0)

  

启动setup.exe时,系统不会提示我提升权限。

这是正常行为。升降器不需要升高。

  

这基本上是谎言,因为它没有成功安装。   相反,它将应用程序exe直接放到C:。

所以它确实安装了您的应用程序,但位置错误。这与海拔无关。在安装项目的文件系统编辑器中,您在哪里添加了应用程序文件?您是否在“应用程序文件夹”中添加了它们?

  

如何让安装程序要求管理员权限。

单击“安装”按钮时,为所有用户安装的MSI软件包会自动提示提升。如果它没有自动升级并安装在每个机器的位置(如C :),安装将失败,并且不会在目标计算机上复制任何内容。