背景
我编写了一个小型 C#/.NET 4.0 应用程序,用于将程序文件中安装的游戏的各种设置与不同计算机上同一游戏的其他副本同步(想想 Chrome 书签同步,但对于这个游戏)。同步本身是一件相对简单的事情,处理存储在游戏 Program Files 文件夹中的文件。
在我的机器上,这可以正常工作,无需通过 UAC 提升我的应用程序。 Windows 7 使游戏使用程序文件虚拟化,我的应用程序可以正常工作。
然而,在很多测试人员的机器上,我收到报告称应用程序无法处理这些文件,在某些情况下甚至看不到游戏的文件夹!让用户右键单击并“以管理员身份运行”可以解决每种情况下的问题。
那么,我们只需将应用程序的清单设置为需要管理员权限,对吗?当用户手动调用应用程序或同步进程时,这很好(尽管并不理想),因为他们将与应用程序交互并准备好接受 UAC 请求。
然而,我的应用程序的功能之一是“自动同步”选项,它允许用户“设置并忘记”应用程序。通过此设置,应用程序会将自身放入 HKCU\Software\Microsoft\Windows\CurrentVersion\Run 的注册表中,以便在启动时运行,并位于系统托盘中,根据需要在后台同步设置。
显然,我需要在这里变得更聪明。在用户登录其帐户后立即或之后随机间隔显示 UAC 提示并不是前进的方向。
所以,我的问题!
处理我需要在启动时运行需要管理员权限的应用程序的情况的最佳方法是什么?有没有办法让用户授权安装,使系统自动以正确的权限运行应用程序,而无需在启动/登录时出现提示?
Update需要明确的是,这必须可以通过代码实现。
您应该考虑使您的同步功能存在于 Windows 服务中。
这是在 Windows 上运行“后台”功能的首选方法。
该服务可以在用户的帐户下运行(假设他们有权修改文件),或者您可以使用另一个帐户。最坏的情况是,您可以以 SYSTEM 身份运行(尽管这不是最佳实践)。
如果您已经让后台进程功能正常工作,那么这应该是一个转换为服务的简单过程。
这里有一个示例项目,可以帮助您走上正确的道路:http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)