我有一个线程,我想在我的应用程序中以管理员身份运行。我可以愉快地运行应用程序的其余部分作为默认用户级别( asInvoker )。这可能吗?我注意到有一个“ImpersonateLoggedOnUser”函数。我可以以某种方式使用它来登录管理员,然后让线程冒充那个人?
似乎这应该是一件非常微不足道的事情......但似乎没有任何明显的方法可以做到这一点。任何人都可以帮助我吗?
编辑:所以,如果我必须启动一个单独的进程,我有什么方法可以CreateProcess一个新的进程,让它从特定的入口点启动。我当然可以使用命令行处理来完成它,但我真的宁愿我阻止用户进入命令行并启动一个不可关闭的进程!
答案 0 :(得分:4)
不,高程是每个进程,而不是线程。
如果应用程序的其余部分运行非提升,您可以使用某个参数(myapp.exe /uac "ipcparamhere"
)提升自己,并使用某种Inter-process communication进行通信回到你的应用程序的“主要实例”。 (如果提升的进程只执行简单的操作,您可以使用进程的退出代码检查是否成功)
答案 1 :(得分:1)
这是不可能的。您需要通过在应用中添加清单来获得管理员权限。谷歌“requireAdministrator”找到你需要的清单。您的用户可能会很快厌倦一遍又一遍地做这件事,您最好的办法是将需要这些权限的任务分拆到一个单独的流程中。例如服务。
答案 2 :(得分:1)
你可以启动一个单独的exe并在其上有一个清单,说它需要管理员。然后一定要使用shell执行启动它,它使用清单,然后你就完成了。作为一个深思熟虑的触摸,在启动该线程的按钮上放置UAC屏蔽。 (如果您手动执行此操作,请发送BCM_SETSHIELD消息。)
您可以决定是否要在单独的进程中显示可见窗口。同时,用户仍然可以拖放到主应用程序中。