2017-11-18 82 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