【发布时间】: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