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

iKe*_*dac 7 .net c# windows uac

背景

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

在我的机器上,这可以正常工作,而无需通过UAC提升我的应用程序.Windows 7使游戏使用程序文件虚拟化,我的应用程序正常工作.

然而,在很多测试人员的机器上,我得到的报告是应用程序要么无法使用文件,要么在案例中甚至看不到游戏的文件夹!让用户右键单击并"以管理员身份运行"可以解决每种情况下的问题.

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

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

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

所以,我的问题!

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

更新只是为了清楚,这必须在代码中实现.

小智 6

您应该考虑在Windows服务中存在同步功能.这是在Windows上运行"后台"功能的首选方法.

服务可以在用户的​​帐户下运行(假设他们有权修改文件),或者您可以使用另一个帐户.最糟糕的情况是,您可以作为SYSTEM运行(尽管这不是最佳实践).

如果您已经有后台处理功能,那么这应该是一个转换为服务的简单过程.

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