【发布时间】:2018-05-01 23:06:33
【问题描述】:
我正在尝试制作一个修改我的主机文件的 C 程序,但我不能直接用该程序打开文件,因为 Windows 会阻止它。有什么方法可以让程序在代码中请求管理权限,或者我可以使用任何脚本在管理模式下启动程序?
【问题讨论】:
标签: c windows administrator
我正在尝试制作一个修改我的主机文件的 C 程序,但我不能直接用该程序打开文件,因为 Windows 会阻止它。有什么方法可以让程序在代码中请求管理权限,或者我可以使用任何脚本在管理模式下启动程序?
【问题讨论】:
标签: c windows administrator
右键单击是一种允许您以管理员权限运行任何程序的解决方案。这包括在“属性”中打勾。
在 Windows 7 及更高版本上,您还可以重命名您的程序,使其名称包含 setup(如 hosts_setup.exe),如果双击,它将自动在管理员模式下运行(调出 UAC 提示符)在资源管理器中单击。请注意,这只适用于在资源管理器中双击。
你也可以看看How can I run a child process that requires elevation and wait?。它调用 WinAPI,是一种相当原生的方法。 最好的解决方案是 add it in menifest,这样您的程序在启动时请求 Admin。
【讨论】:
requireAdministrator,则如果调用者尚未提升,则CreateProcess 失败并显示ERROR_ELEVATION_REQUIRED。调用者可以通过ShellExecuteEx 使用“runas”操作重试。这会将请求发送到名为“应用程序信息”的系统服务,该服务在请求会话的安全桌面上运行许可程序(UAC 对话框)。如果得到同意,服务会调用CreateProcessAsUser 以在给定的会话中运行提升的进程。控制台应用程序分配一个提升的控制台(conhost.exe 实例)而不是继承父级的。
射击,好吧,在发布这个问题后几秒钟,我找到了解决方案。事实证明,您可以右键单击可执行文件,单击属性,然后在兼容性选项卡上,选择“以管理员身份运行此程序”。以防万一其他人需要此信息。
【讨论】: