2017-11-18 197 views
0

我想制作一个修改我的主机文件的C程序,但是我不能直接用程序打开文件,因为Windows会阻止它。有什么方法可以让程序在代码中请求管理权限,或者我可以使用任何脚本以管理员模式启动程序?在C程序中请求管理员权限?

回答

0

拍摄,好吧,发布这个问题后的几秒钟,我找到了一个解决方案。事实证明,您可以右键单击可执行文件,单击属性,然后在兼容性选项卡上,选择“以管理员身份运行此程序”。以防万一其他人需要这些信息。

+0

我不确定这会回答你的问题 –

+0

它回答第一句话,但通过外部手段回避第二句。 –

1

右击是一种解决方案,允许您以管理员权限运行任何程序。这包括勾选“属性”中的框。

在Windows 7或更高版本,你也可以让其名称中包含setup重命名程序(如hosts_setup.exe),它会自动在管理员模式下运行(会弹出UAC提示)在资源管理器中,如果双击。请注意,这只能通过在资源管理器中双击来实现。

您还可以看看How can I run a child process that requires elevation and wait?。它称为WinAPI,是一种相当原生的方法。最好的解决方案是add it in menifest,以便您的程序在启动时请求管理员。

+0

我不是Windows用户,但我需要问:这是否意味着在你运行它之后,用户被要求输入Windows管理员密码。或者我错了? – Michi

+0

@Michi它带来了UAC提示。没有什么可以滑过去的。 – iBug

+0

@Michi,如果表现为requireAdministrator,那么如果调用者尚未升级,则CreateProcess失败,并返回ERROR_ELEVATION_REQUIRED。调用者可以使用“runas”操作通过“ShellExecuteEx”重试。这会将请求发送到名为“Application Information”的系统服务,该服务在请求的会话的安全桌面上运行consent.exe(UAC对话框)。如果获得同意,服务会调用'CreateProcessAsUser'来运行给定会话中的升级进程。控制台应用程序分配一个提升的控制台(conhost.exe实例),而不是继承父级的控制台。 – eryksun