【问题标题】:How to make the setup.exe from a VS2010 Setup Project ask for Admin Privileges?如何使 VS2010 安装项目中的 setup.exe 要求管理员权限?
【发布时间】:2011-09-16 11:20:59
【问题描述】:

我有一个问题,我猜这个问题很容易解决……但是,呵呵。

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

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

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

关于我的设置的说明

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

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

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

如果我以管理员身份手动运行 setup.exe,一切正常。但这不能认真地成为要走的路。

那么我怎样才能让设置始终以管理员身份运行?

【问题讨论】:

  • 首先,您应该修复您的安装程序以将文件写入 Program Files 而不是 C:。 UAC 开启了吗? C 的根:受限用户可写吗?
  • 正如我所说,当以管理员身份手动启动时,安装程​​序工作正常(并安装到程序文件)。当然,UAC 已打开。不,C:\ 不可写,这是标准的 AFAIK,但如果以低权限启动,MSI 仍会将文件放在那里。
  • 那是不可能的。如果没有在 C:\ 上设置提升或适当的权限,则安装过程无法写入 C:\。因此,要么您的包以某种方式被提升,要么 C:\ 具有允许每个人完全访问的权限。
  • @CosminPirvu 事实的规范力量胜过您的陈述。它正在发生。在我的机器上。不止一次。我放弃了。
  • @Cosmin 默认权限不允许在根目录下创建文件,但允许创建文件夹。这在某种程度上解释了为什么安装程序可以在不提升的情况下在那里写入文件。我想在您的情况下,自定义操作或某些操作失败并且 INSTALLLOCATION 设置为 C:\。我建议使用详细日志记录运行安装:非提升和提升,并比较日志。魔术发生了,但总是对魔术有一个合乎逻辑的解释(*几乎总是)。

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


【解决方案1】:

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

我最近遇到了这个问题。就我而言,原因是AlwaysInstallElevated 策略是通过 GPO 在计算机上设置的。该策略在每台计算机策略中设置为 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 是我发现的,它帮助我找到了这个问题的根本原因。

【讨论】:

  • 不知道为什么这个答案被低估了,伙计。非常感谢!
【解决方案2】:

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

VS2010 Setup Project - Run As Administrator

我将在这里简要地重复解决方案。基本上,您需要手动编辑设置项目文件 (.vdproj) 并将以下属性设置为 TRUE:

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

【讨论】:

    【解决方案3】:

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

    这是正常行为。助推器不需要提升。

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

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

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

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

    【讨论】:

    • 不,这里不是这样。
    • @Christoph 不,如果 MSI 无法安装其中一个文件,安装将会失败。您可以尝试使用详细日志记录运行安装以查看发生了什么。
    • @Alexey 让我告诉你:我是一名训练有素的专业软件开发人员,拥有多年的专业知识。到目前为止,我从未遇到过这种奇怪的行为,但这一直在两台不同的机器上发生。我不知道为什么安装程序会像这样被破坏。我什至使用 VS2010 向导构建了一个新的安装项目......结果仍然相同。我决定保持原样,并要求我的客户以管理员身份手动运行安装程序。
    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2012-07-14
    • 2021-12-26
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多