web-dev-qa-db-ja.com

単一メソッドの管理者権限

1つの方法で管理者権限を要求することはできますか?

このようなもの:

[RequireAdminRightsForThisMethod()]

private void TheMethod(){

    // Do something

}
63
lluismontero

メソッドに PrincipalPermission 属性を追加して、その実行に管理者権限を要求できます。

[PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN\Administrators")]
public void MyMethod()
{
}

これについては、次の記事で詳しく説明します。

C#.Netのセキュリティ原則とローカル管理者権限

既存のプロセスを昇格させる方法を探している場合、管理者特権がプロセスレベルで起動時にプロセスに与えられるため、これは可能だとは思いません(関連する question を参照)。目的の動作を得るには、「管理者として」アプリケーションを実行する必要があります。

ただし、希望することを実行できる可能性のあるいくつかのトリックがありますが、これにより深刻なセキュリティリスクが生じる可能性があることに注意してください。 MSDNフォーラムの次のスレッドを参照してください。

標準ユーザーから管理者資格情報を要求せずにMyElevatedComサーバーを起動する

更新(コメントから)

更新に昇格が必要な場合、アプリケーションの更新は別のプロセス(別の実行可能ファイル、またはコマンドラインスイッチで呼び出されたアプリケーション)で行うのが最適です。その別のプロセスでは、次のように昇格をリクエストできます。

var psi = new ProcessStartInfo();
psi.FileName = "path to update.exe";
psi.Arguments = "arguments for update.exe";
psi.Verb = "runas";

var process = new Process();
process.StartInfo = psi;
process.Start();   
process.WaitForExit();
83
Dirk Vollmar

メソッドを実行するには管理者特権が必要な場合がありますが、メソッドの実行時に管理者に自動的に昇格することはできません。

15
SLaks