Windows 7 UAC提升

时间:2010-04-23 11:39:08

标签: c++ windows-7 uac windows-vista

我有一个线程,我想在我的应用程序中以管理员身份运行。我可以愉快地运行应用程序的其余部分作为默认用户级别( asInvoker )。这可能吗?我注意到有一个“ImpersonateLoggedOnUser”函​​数。我可以以某种方式使用它来登录管理员,然后让线程冒充那个人?

似乎这应该是一件非常微不足道的事情......但似乎没有任何明显的方法可以做到这一点。任何人都可以帮助我吗?

编辑:所以,如果我必须启动一个单独的进程,我有什么方法可以CreateProcess一个新的进程,让它从特定的入口点启动。我当然可以使用命令行处理来完成它,但我真的宁愿我阻止用户进入命令行并启动一个不可关闭的进程!

3 个答案:

答案 0 :(得分:4)

不,高程是每个进程,而不是线程。

如果应用程序的其余部分运行非提升,您可以使用某个参数(myapp.exe /uac "ipcparamhere")提升自己,并使用某种Inter-process communication进行通信回到你的应用程序的“主要实例”。 (如果提升的进程只执行简单的操作,您可以使用进程的退出代码检查是否成功)

答案 1 :(得分:1)

这是不可能的。您需要通过在应用中添加清单来获得管理员权限。谷歌“requireAdministrator”找到你需要的清单。您的用户可能会很快厌倦一遍又一遍地做这件事,您最好的办法是将需要这些权限的任务分拆到一个单独的流程中。例如服务。

答案 2 :(得分:1)

你可以启动一个单独的exe并在其上有一个清单,说它需要管理员。然后一定要使用shell执行启动它,它使用清单,然后你就完成了。作为一个深思熟虑的触摸,在启动该线程的按钮上放置UAC屏蔽。 (如果您手动执行此操作,请发送BCM_SETSHIELD消息。)

您可以决定是否要在单独的进程中显示可见窗口。同时,用户仍然可以拖放到主应用程序中。