有时候我们需要临时用管理员权限做一些事情,在 Windows 上,可以提升权限启动进程。比如通过右键菜单。
那么在代码中如何实现这样的功能呢?
使用 runas 工具
网上很多说法都是用 runas 运行,但是其实是有问题的,我研究了很就也不能真正提权。
问题有两个:
- 需要输入用户密码,而通过右键菜单,只需要确认一下就行了。
- 即使用管理员用户执行,也不能完成特权操作
这里介绍基于 Shell Exec 执行的方法,亲测有效。
方法一
使用 bat 脚本,通过 mshta 程序执行一段 vbscript 脚本
mshta vbscript:CreateObject("Shell.Application").ShellExecute("regsvr32","%1","","runas",1)(window.close) && exit
regsvr32 是我们真正要启动的程序,有一个参数(%1),从外面传进来。
方法二
使用 ShellExecuteEx,通过 C++ 代码调用
SHELLEXECUTEINFO info{sizeof(info), 0, NULL, L"runas", L"regsvr32", path.c_str(), SW_HIDE };
::ShellExecuteEx(&info);