是否可以在Windows中运行C++应用程序以在运行时从操作系统请求管理员权限?
我知道它可以在编译时完成,但似乎无法在任何地方找到它是否可以在运行时完成.
谢谢你的帮助!
编辑:如果我希望当前实例具有提升的权限怎么办?例如,我可能将数据存储在我想要保留的内存中.
Kat*_*ory 37
如果您希望应用程序始终提升,您可以通过构建一个(不是在技术上编译)或将外部清单放在与exe相同的文件夹中来为它提供清单.如果您想作为一个人决定高架运行,请右键单击exe或快捷方式,然后选择"以管理员身份运行".如果从代码启动它,那么在@vcsjones注释时,您将在runas
启动该进程时使用动词.例如:
ShellExecute( NULL,
"runas",
"c:\\windows\\notepad.exe",
" c:\\temp\\report.txt",
NULL, // default dir
SW_SHOWNORMAL
);
Run Code Online (Sandbox Code Playgroud)
不完全,但你可以做相反的事情 - 你可以放弃特权,如果你已经拥有它们.因此,您可以使用Kate Gregory列出的方法之一让您的程序以管理员身份运行.然后,删除不需要的权限; 请参阅Windows上的C++中的删除权限,了解如何执行此操作.
您只能在创建过程中提升流程.当一个进程已经运行时,就无法更改其安全令牌:它是否运行升级.
如果您的应用程序需要执行管理任务,并且它通常不提升,则必须创建另一个.exe,它将使用其清单请求提升.要启动升级过程,您必须使用ShellExecute
或ShellExecuteEx
运行.在主进程中,您需要一种方法将命令传递给将提升的新进程.
有关UAC的更多信息,请阅读为Windows Vista系列设计UAC应用程序.