是否可以仅通过代码以管理员身份运行

时间:2011-04-21 12:20:38

标签: c visual-studio-2008 winapi process uac

操作系统:Windows 语言:C

我有一个要求,例如,我不应该更改exe的清单或exe文件的属性来以管理员身份运行它。有没有机会用createprocess / createprocessasuser api来满足我的要求。这可以通过shellexecute api完成,但是我需要在挂起状态下创建我的进程。这只能通过createprocess或createprocessasuser api来完成。 如果有人可以通过这些api指导我以管理员身份运行程序,那将不胜感激。

3 个答案:

答案 0 :(得分:1)

我觉得你运气不好。 ShellExecute将启动第二个提升的应用程序,因为它有清单或因为您使用runas动词。 CreateProcess不会。

也许您可以使用CreateProcess启动暂停的第二个应用程序,然后可以使用ShellExecute启动实际执行特权操作的提升的第三个应用程序?或者,您可以运行升级的整个应用程序套件,或将功能移动到UAC免除的服务中。

答案 1 :(得分:1)

我认为最简单的解决方案是通过runas /user:administrator "yourprocess.exe"路由您尝试启动的流程,或者将runas字符串文字提供给ShellExecute的第二个参数。这似乎是一个没有文档记录的难题。

ShellExecute(
    NULL,
    _T("runas"),
    _T("notepad.exe"),
    _T(""),    // params
    NULL,        // directory
    SW_SHOW
);

答案 2 :(得分:0)

这是不可能的,因为会违反这种限制的全部目的

即使是出于“好意”,允许它仍构成安全漏洞。

  

Blockquote哦来吧。两件事:你完全低估了坏人(他们中的许多人很聪明,不会问这样的问题),似乎。而且还因为有人想做“hacky”事情并不意味着它是出于恶意目的。 - STATUS_ACCESS_DENIED

相关问题