背景
我编写了一个小的C#/.NET 4.0应用程序,可以将一个游戏在Program Files中安装的各种设置与其他不同机器上的相同游戏的设置进行同步(类似于Chrome书签同步,但是针对这个游戏)。同步本身是一个相对简单的过程,处理存储在游戏Program Files文件夹内的文件。
在我的机器上,这可以正常工作,而无需通过UAC提升我的应用程序。Windows 7使用Program Files虚拟化,我的应用程序可以很好地运行。
然而,在许多测试人员的机器上,我收到报告说该应用程序要么无法处理文件,要么甚至无法看到游戏文件夹!在用户右键单击并“以管理员身份运行”时,每种情况都可以解决问题。
那么,我们只需将应用程序的清单设置为需要管理员特权,对吗?这很好(虽然不理想),因为当用户手动调用应用程序或同步过程时,他们将与应用程序交互并准备接受UAC请求。
然而,我的应用程序之一的功能是“自动同步”选项,它允许用户“设置和忘记”应用程序。设置后,应用程序将自己放入注册表中的HKCU\Software\Microsoft\Windows\CurrentVersion\Run,以便在启动时运行,并在需要时在系统托盘中同步设置。
显然,我需要更加聪明。在用户登录其帐户或随机间隔后立即呈现UAC提示并不是正确的方法。
所以,我的问题是!
如何处理需要以管理员特权运行应用程序的启动情况?是否有一种方法可以使用户授权安装,从而导致系统在启动/登录时自动以正确的权限运行应用程序,而无需提示?
更新为了明确起见,这必须在代码中实现。