我们有一个exe实际上会检查文件夹的内容,然后启动一个Windows服务来对该文件夹中的文件进行一些处理。 因此,我们将此exe作为系统启动程序的一部分,因此每次系统重新启动/启动时都会运行。
现在用户非常恼火,因为每次重新启动时他都会弹出UAC。但是,我们需要拥有此exe的管理员权限,因为它启动了Windows服务。因此,我研究并发现了几个这个问题的解决方案。 This和This 但无法确定哪个更好,更不容易受到安全影响。 另一个可能的解决方案是.exe本身的代码检测系统启动,如果我们在目标文件夹中有任何内容,那么只需要用户提出UAC并启动Windows服务。否则就是不要运行exe。我不知道如何在C ++中这样做。任何指针都会有所帮助。如果有更好的解决方案,请随时欢迎。
答案 0 :(得分:0)
您可能希望在此处使用任务计划程序。
只需在安装过程中创建一个任务,并将“当计算机启动时”作为触发器,并设置“以最高权限运行”安全选项。
答案 1 :(得分:0)
问题是你混淆了系统和用户会话。
如果这些文件的处理是代表用户完成的,则可能不应由服务完成。如果两个用户想要处理他们的文件会怎样服务应该使用什么安全上下文?显然,您不需要管理员权限来处理某些用户文件。
如果服务正在执行某个系统级任务,则它不应该依赖于用户。事实上,在启动时运行表明你想要这种模式。 (用户applet在登录时启动,而不是在重启后启动)。因此,您的设计中的主要问题似乎是您尝试在错误的时刻运行应用程序(使用UI),这需要太多的权限(导致UAC)。重新设计服务,使其完成所有需要管理员权限的任务,并在安装服务时将其设置为自动启动。这仍然需要在安装时使用UAC,但这是在预期的UAC时。