为了账号安全,请及时绑定邮箱和手机立即绑定

在运行时请求管理员特权

/ 猿问

在运行时请求管理员特权

吃鸡游戏 2019-11-15 13:19:59

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

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

谢谢你的帮助!

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


查看完整描述

3 回答

?
郎朗坤

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


查看完整回答
反对 回复 2019-11-15
?
慕姐829404

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


ShellExecute( NULL, 

    "runas",  

    "c:\\windows\\notepad.exe",  

    " c:\\temp\\report.txt",     

    NULL,                        // default dir 

    SW_SHOWNORMAL  

); 


查看完整回答
反对 回复 2019-11-15
?
智慧大石

您只能在流程创建期间提升它。当一个进程已经运行时,就无法更改其安全性令牌:它要么提升运行,要么不提升运行。


如果您的应用程序需要执行管理任务,并且通常在不提升的情况下运行,则您必须创建另一个.exe文件,该文件将要求使用清单文件进行提升。要启动提升过程,您必须使用ShellExecute或ShellExecuteEx运行。从您的主流程中,您将需要一种将命令传递到将运行提升的新流程的方法。


有关UAC的更多信息,请阅读“ 设计Windows Vista系列UAC应用程序 ”。


查看完整回答
反对 回复 2019-11-15

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信