【发布时间】:2017-09-11 22:32:46
【问题描述】:
我们刚刚发现调用 Win32 SetDateTime 函数的代码需要在 Windows 7 中以提升模式运行,即即使以管理员身份登录,仍然必须选择以管理员身份运行设置日期代码更改日期的电话。
我可以在代码中做些什么来始终在提升的权限下调用此函数吗?
【问题讨论】:
标签: c# .net elevated-privileges
我们刚刚发现调用 Win32 SetDateTime 函数的代码需要在 Windows 7 中以提升模式运行,即即使以管理员身份登录,仍然必须选择以管理员身份运行设置日期代码更改日期的电话。
我可以在代码中做些什么来始终在提升的权限下调用此函数吗?
【问题讨论】:
标签: c# .net elevated-privileges
您可以使用 ShellExecute API 调用来启动具有提升权限的可执行文件。
但是,如果在计算机上启用了 UAC(用户访问控制),用户仍会收到 UAC 提示,要求提供提升的运行权限。
所以我认为您无法避免提示提升权限,但至少您的用户不必以管理员身份手动运行程序。
如果您在如何以管理员身份启动可执行文件方面需要帮助,请告诉我。
【讨论】:
这不是安全工作的方式。更改时钟是一个非常侵入性的操作,它有很多副作用。 Windows 或任何其他操作系统中没有任何机制可以让您以有限的权限启动进程,然后随意绕过这些限制并突然获得管理员权限。如果可能的话,以有限的权限运行程序是没有任何意义的。
如果您想做这样的事情,那么您必须以提升的权限运行您的程序。在要求您作为服务或计划任务运行的 Vista 和 Win7 上。这需要管理员安装。 UAC 为常规程序提供了一种获得管理员权限的方法,您必须在程序中包含清单,以便通知用户您的权限提升。 Google 'requireadministrator',抢占先机。
【讨论】:
正如其他人所说,您需要生成一个新进程来获得提升的权限,这将导致 UAC 对话框。
如果您需要在无人看管的情况下运行,您可以尝试作为服务运行。这将为您提供所需的提升上下文。
【讨论】: