差分

ナビゲーションに移動 検索に移動

Xamarin.Macで管理者権限に昇格してコマンド実行する

2,231 バイト追加, 2015年7月6日 (月) 02:29
ページの作成:「Mac OS Xのアプリは通常は一般権限で実行されるが、システムファイルの操作など管理者権限に昇格して危険な操作をしたい...」
[[Mac OS X]]のアプリは通常は一般権限で実行されるが、システムファイルの操作など管理者権限に昇格して危険な操作をしたいこともある。

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

<source lang="csharp">
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;
}
}
}
}
</source>

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

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

==関連項目==
*[[Xamarin.Mac/AppleScriptを実行する]]
*[[Xamarin.Mac/スクリーンセーバーを終了させる]]

==参考文献==
{{reflist}}

{{stub}}

[[category:Xamarin.Mac]]
匿名利用者

案内メニュー