Xamarin.Mac/管理者権限に昇格して実行する

提供: MonoBook
移動: 案内検索

Mac OS Xのアプリは通常は一般権限で実行されるが、システムファイルの操作など管理者権限に昇格して危険な操作をしたいこともある。

実装1:ExecuteWithPrivileges[編集]

Security名前空間のAuthorizationクラスにExecuteWithPrivilegesメソッドという恐ろしいものが用意されている。 認証が成功した場合はroot権限で実行されので取り扱いには細心の注意を必要とする。

using System;
using AppKit;
using Security;
 
namespace Auth
{
    static class MainClass
    {
        static void Main(string[] args)
        {
            NSApplication.Init();
 
            var ret = Auth();
            Console.WriteLine(ret);
        }
 
        static AuthorizationStatus Auth()
        {
            var defaults = AuthorizationFlags.Defaults;
 
            using (var auth = Authorization.Create(defaults))
            {
                // ExecuteWithPrivilegesメソッドを呼ぶと認証ダイアログが表示される。
                var args = new[]{"-c", "\"\"mkdir -p /usr/share/MyFolder\"\""};
                var ret = (AuthorizationStatus)auth.ExecuteWithPrivileges("/bin/sh", defaults, args);
                return ret;
            }  
        }
    }
}

注意1[編集]

このプログラムを実行すると「/usr/share/MyFolder」というゴミディレクトリがroot権限で生成されるので注意しよう。 root権限sudoの意味がわからない者にはオススメできない。

注意2[編集]

また、アップルの公式ドキュメントによると1つのアプリが管理者権限に昇格して直接的に危険な操作をすることは推奨されておらず、管理者権限が不必要な部分と、管理者権限が必要な部分でアプリを2つに分離させて、プロセス間通信をすることが推奨されている。つまりこの実装は手抜きで楽であるが世間様にオススメできるようなものではない。

関連項目[編集]

参考文献[編集]