簡體   English   中英

如何以sudo方式運行應用

[英]How to run app as sudo

我已經編寫了一個.NET Core Mac OSX菜單代理應用程序(即,UI是帶有上下文菜單的菜單欄中的圖標)。

此應用程序的功能之一是主機文件更新(即,從/ etc / hosts添加/刪除條目)。 但是要寫入文件,您需要sudo權限。

文件更新使用System.IO.File.WriteAllText重寫整個文件。

我怎么可以:

  1. 以sudo方式啟動應用程序(以某種方式提示),同時仍允許用戶單擊應用程序而不是從終端啟動,或者

  2. 以某種方式提供對File.WriteAllText命令的sudo訪問(在需要時提示用戶)。

簡而言之,我需要做什么才能提供訪問權限以更新主機文件?

在您的應用啟動腳本中,您需要這樣做。

/ usr / bin / osascript -e'以管理員權限運行應用程序“ dotnet MyCoolApp”嗎?

更多信息在這里: 通過sudo通過GUI要求輸入密碼

我終於通過@SushiHangover的建議找到了解決方案,該建議導致了以下帖子: https ://forums.xamarin.com/discussion/103039/xamarin-mac-multiple-do-shell-script-with-administrator-privilege -with酮密碼請求

我沒有使用System.IO.File靜態方法直接寫入hosts文件,而是寫入了一個臨時文件。 然后,我使用ExecuteWithPrivileges方法啟動cat命令,以用臨時文件的內容覆蓋hosts文件的內容。 這將顯示Mac默認的用戶密碼提示,並且cat命令作為sudo執行。

private static void WriteToHostsFile(IEnumerable<HostEntry> hostEntries, IHostsFileWriter hostsWriter)
    {
        var hostsText = hostsWriter.GetHostsFileText(hostEntries);
        var fi = new FileInfo("hoststemp.txt");
        File.WriteAllText("hoststemp.txt", hostsText);
        var defaults = Security.AuthorizationFlags.Defaults;
        using (var auth = Security.Authorization.Create(defaults))
        {
            auth.ExecuteWithPrivileges("/bin/cat", defaults, new[] { fi.FullName + " > /etc/hosts" });
        }
    }

應該注意的是,此方法已被標記為不贊成使用SMJobBless: https : //developer.apple.com/library/archive/samplecode/SMJobBless/Introduction/Intro.html

不過,我還沒有設法在Xamarin中解決這個問題,並且在完成我需要做的小任務時顯得很投入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM