如何在Windows 7上使用提升的权限调用Win32 API

时间:2010-12-02 13:09:29

标签: c# .net elevated-privileges

我们刚刚发现调用Win32 SetDateTime函数的代码需要在Windows 7中以提升模式运行,即使以管理员身份登录,仍然必须选择运行Set Date代码作为呼叫管理员更改日期。

我能在代码中做些什么来始终在提升的权限下调用此函数吗?

3 个答案:

答案 0 :(得分:2)

您可以使用ShellExecute API调用以提升的权限启动可执行文件。

但是,如果在计算机上启用了UAC(用户访问控制),则用户仍将获得UAC提示,要求获得运行提升的权限。

因此我认为您无法避免提升权限,但至少您的用户不必以管理员身份手动运行程序。

如果您需要有关如何以管理员身份启动可执行文件的帮助,请与我们联系。

答案 1 :(得分:1)

这不是安全的工作原理。更改时钟是非常侵入式操作,它具有非常多的副作用。在Windows或任何其他操作系统中没有任何机制可以启动具有有限权限的进程,然后随意绕过这些限制并突然获得管理员权限。如果可能的话,运行具有有限特权的程序将没有任何意义。

如果您想要执行此类操作,则必须以提升的权限运行您的程序。在Vista和Win7上,要求您作为服务或计划任务运行。这需要管理员安装。 UAC为常规程序提供了获取管理权限的方式,您必须在程序中包含清单,以便向用户通知您的权限提升。谷歌'requireadministrator',第一次点击。

答案 2 :(得分:0)

就像其他人所说的那样,您需要生成一个新进程来获取提升权限,这将导致UAC对话框。

如果您需要无人值守运行,可以尝试作为服务运行。这将为您提供所需的高级语境。