c# - 在没有 UAC 提示的情况下向启动时启动的应用程序授予管理员权限?

标签 c# .net windows uac

背景

我编写了一个小型 C#/.NET 4.0 应用程序,可以将安装在 Program Files 中的游戏的各种设置同步到不同机器上同一游戏的其他副本(想想 Chrome 书签同步,但对于这个游戏)。同步本身是一件相对简单的事情,处理存储在游戏 Program Files 文件夹中的文件。

在我的机器上,无需通过 UAC 提升我的应用程序即可正常工作。 Windows 7 让游戏使用 Program Files 虚拟化,我的应用程序可以正常运行。

但是,在许多测试人员的机器上,我收到报告称应用程序无法处理文件,有时甚至看不到游戏文件夹!让用户右键单击并“以管理员身份运行”可以解决所有情况下的问题。

所以,我们只是将应用程序的 list 设置为需要管理员权限,对吗?当用户手动调用应用程序或同步过程时,这很好(尽管不理想),因为他们将与应用程序交互并准备好接受 UAC 请求。

但是,我的应用程序的功能之一是“自动同步”选项,它允许用户“设置并忘记”应用程序。通过此设置,应用程序将自身放入注册表 HKCU\Software\Microsoft\Windows\CurrentVersion\Run 以在启动时运行,并位于系统托盘中,根据需要在后台同步设置。

显然,我需要在这里变得更聪明。一旦用户登录到他们的帐户或之后随机间隔显示 UAC 提示不是前进的方向。

那么,我的问题!

处理我需要在启动时运行需要管理员权限的应用程序的情况的最佳方法是什么?有没有办法让用户授权安装,使系统自动以正确的权限运行应用程序,而无需在启动/登录时提示?

更新 需要说明的是,这必须可以在代码中实现。

最佳答案

您应该考虑让您的同步功能存在于 Windows 服务中。 这是在 Windows 上运行“后台”功能的首选方法。

该服务可以在用户的​​帐户下运行(假设他们有修改文件的权限),或者您可以使用另一个有权限的帐户。最坏的情况是,您可以以 SYSTEM 身份运行(尽管这不是最佳做法)。

如果您的后台进程功能已经正常运行,那么这应该是一个简单的转换为服务的过程。

这里有一个示例项目可以让您走上正确的道路:http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx

关于c# - 在没有 UAC 提示的情况下向启动时启动的应用程序授予管理员权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4640056/

相关文章:

c# - NLog MappedDiagnosticsLogicalContext 不工作在异步/等待与 ConfigureAwait(false)

c# - Url.Action 不包括端口号

c# - 如何在 C# 中启动文件

c# - 如何禁用 ListBox 滚动条的标准上下文菜单?

.net - .Net 应用程序的 IoC 和 DI 框架

C++ 语法错误 - 找不到标识符

c++ - 从 C++ CreateProcess 启动 Windows 批处理有不同的行为

c# - 设置 Session.Timeout 或将其添加到 web.config 之间有区别吗?

c# - 序列不包含匹配元素

regex - PowerShell 正则表达式不工作