在运行时请求管理员特权

是否可以在Windows上运行C ++应用程序,以便在运行时从操作系统请求管理员特权?

我知道它可以在编译时完成,但似乎找不到任何地方是否可以在运行时完成。

谢谢你的帮助!

编辑:如果我希望当前实例具有提升的特权怎么办?例如,我可能将数据存储在要保留的内存中。


吃鸡游戏
浏览 676回答 3
3回答

郎朗坤

虽然不完全,但是您可以采取相反的做法- 如果已经拥有特权,则可以放弃特权。因此,您可以使用Kate Gregory列出的方法之一,以管理员身份启动程序。然后,放弃不需要的特权;请参阅如何在Windows上的C ++中删除特权。

Smart猫小萌

如果您希望应用程序始终处于高程状态,则可以通过在其中建立一个清单(而不是从技术上进行编译)或通过将外部清单与exe放在同一文件夹中来为它提供清单。如果您要决定以个人身份运行它,请右键单击exe或快捷方式,然后选择“以管理员身份运行”。如果要从代码启动它,则runas在启动该过程时使用动词作为@vcsjones注释。例如:ShellExecute( NULL,     "runas",      "c:\\windows\\notepad.exe",      " c:\\temp\\report.txt",         NULL,                        // default dir     SW_SHOWNORMAL  ); 

智慧大石

您只能在流程创建期间提升它。当一个进程已经运行时,就无法更改其安全性令牌:它要么提升运行,要么不提升运行。如果您的应用程序需要执行管理任务,并且通常在不提升的情况下运行,则您必须创建另一个.exe文件,该文件将要求使用清单文件进行提升。要启动提升过程,您必须使用ShellExecute或ShellExecuteEx运行。从您的主流程中,您将需要一种将命令传递到将运行提升的新流程的方法。有关UAC的更多信息,请阅读“ 设计Windows Vista系列UAC应用程序 ”。
打开App,查看更多内容
随时随地看视频慕课网APP