【发布时间】:2012-06-26 00:51:14
【问题描述】:
我在 Windows 7 下使用 Qt 编写了一个应用程序。该应用程序以普通用户权限启动,但我想获得管理员权限,因为我想修改注册表以自动启动应用程序。
我该怎么做?
【问题讨论】:
-
@Deanna:不完全是重复的,因为这有一个更简单的解决方案:如果写入
HKEY_CURRENT_USER而不是HKEY_LOCAL_MACHINE,则不需要管理员权限。
我在 Windows 7 下使用 Qt 编写了一个应用程序。该应用程序以普通用户权限启动,但我想获得管理员权限,因为我想修改注册表以自动启动应用程序。
我该怎么做?
【问题讨论】:
HKEY_CURRENT_USER 而不是HKEY_LOCAL_MACHINE,则不需要管理员权限。
查看 MSDN 示例:UAC self-elevation (CSUACSelfElevation)
此外,Wikipedia 实际上是 has a pretty good reference,包括有关 ShellExecuteEx()“runas”动词和提升请求的应用程序清单的信息。
【讨论】:
您应该将正确的清单嵌入到您的 exe:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb756929.aspx.
我知道,你说使用 win32 API,但考虑一下这个标准和推荐的方式。
【讨论】:
您确实不需要需要管理员权限来自动启动您的应用程序。
只需将相应的键写入:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
不需要管理员权限(不像HKEY_LOCAL_MACHINE下的同一路径)。
【讨论】:
要自动启动应用程序,您不需要管理员权限!而不是在 HKLM 下添加注册表项(您需要管理员权限),使用 HKCU 就可以了。
【讨论】:
请注意,程序运行时不能更改权限。它必须被杀死并以正确的权限重新启动。
【讨论】:
要在 HKLM 中自动启动应用程序,需要管理员权限。但是应用程序的权限在运行时不能改变。
所以我制作了一个新的小应用程序,其任务只是写入注册表以使主应用程序自动启动。
主应用程序可以使用 ShellExecuteEx 调用此应用程序以要求管理权限。
【讨论】:
runas 动词,然后 this answer has already been given 并接受。