基本上,我有一个安装有特权的exe应用程序(例如,用户在Vista / Win7 UAC检查中按下“允许”按钮),然后应用程序启动并将自身设置为自动运行,以便应用程序重新启动计算机后将自动重新启动(全部在升高时完成)。用户请求自动启动,并且不对它们强制执行。
此重启指令在注册表中设置,如下所示:CURRENT_USER部分:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
问题是,当计算机重新启动时,Windows不会让它执行,除非用户将其重新授权为提升进程再次(即任务栏图标)在任务栏中弹出,表示我的EXE /进程启动被阻止,并且用户可以使用任务栏中图标上的菜单启动被阻止的应用程序。
我想补充一点,我将清单文件集成到EXE中,因此在这方面没有问题,并且它在XML文件中准确地记录了它的意图。
为什么Windows会按设计执行此操作?如果一个exe被授权一次,那么这不应该暗示它是永久授权的吗?
但我想问的主要问题是,我该如何解决这个问题?想象一下,我的用户每次应用程序需要自动运行时都必须执行此操作吗?
另外,我想避免整个“你的应用程序不应该首先在高架模式下运行”参数/讨论,或者“没有app需要提升权限,你需要重写它”的讨论。我可以向你保证,我的应用程序需要提升特权(不幸的是)。如果感兴趣,下面有更多细节,没有必要解释或理解这篇文章中的问题,但包括因为我知道有些人会问... ...
其他不必要的阅读:
......事实上,它在所有发布中占87%(取决于用户的行为),并且在13%的时间内不需要它(这是所有发布实例的13%,而不是13%)百分之一的用户),我正在开发第二个exe,其中只有首先启动,并且一旦需要/请求提升功能,升高的部分加载,节省13%的所有发布来自UAC唠叨的人,我只会这将在2013年完成。我将完成所有这些工作,以分离逻辑上不属于应用程序不同领域的功能 - 即使所有这些工作,我上面提到的问题也没有得到解决(但是,非常略微最小化或推迟)。
答案 0 :(得分:3)
我不确定为什么用任何编程语言标记它,因为它实际上是一个ServerFault问题,它甚至不属于我所知道的。
处理此问题的常用方法是通过任务计划程序,使用以最高权限运行选项。有几个已发布的相关过程描述,例如Make Vista launch UAC restricted programs at startup with Task Scheduler的旧版本。
答案 1 :(得分:2)
为什么Windows会按设计执行此操作?如果exe被授权一次, 这不应该意味着永久授权吗?
这是一个意见问题,但这是我的。如果我需要Visual Studio昨天运行提升,因为我希望它为regsvr32一个DLL,这并不能证明我希望它今天在一些不同的应用程序上运行。
但我想问的主要问题是,我该如何解决这个问题?
我会使用服务。编程是非常重要的,但这就是我如何自动运行升级过程。
答案 2 :(得分:1)
要么用户要求关闭UAC,要么就像你已经提到的那样,重新设计你的应用程序,使其在需要点高度时升高,或者在系统帐户下运行服务并让它执行需要提升的东西。 / p>