管理者権限で実行するためのC#プログラム
VistaおよびWindows 7と新しいオペレーティングシステム、UACはユーザーが管理者権限でログインした場合でも、オンになっている場合、UAC(ユーザーアカウント制御)のセキュリティメカニズムを増やすには、そのアプリケーションは、システムディレクトリにシステムをデフォルトすることはできませんレジストリなどは、書き込み用に設定システムの正常な動作に影響を与える可能性があります。このメカニズムは、大幅にシステムのセキュリティを強化しますが、アプリケーション開発者は、この機能を達成するためにどのように、私たちは、UACをオフにすることをユーザーに強制することはできませんが、時には我々は、彼らが道の管理者として実行する必要のあるアプリケーションを開発していますか?
次のC#のプログラムは、管理者権限で実行するようにプロンプトユーザーを達成する方法を示します。
この例では、プログラムはWinフォームを実証し、それに応じて新世代のプロジェクトを変更します:
方法A:System.Diagnostics.Process.Start()メソッドによって開始されます。
方法:次のようにデフォルトで生成されたプログラムファイルを確認し、コードが変更されます。
詳細に説明していないコードにコメントを、作りました。
プログラム静的クラス1。 2 { 3 [STAThread]。 4静的な無効メイン() 5 { 6 Application.EnableVisualStyles();。 。(偽の)7 Application.SetCompatibleTextRenderingDefault; 8 。9 / ** 10 *場合、現在のユーザが管理者、直接開始でありますアプリケーションは、 あなたが管理者でない場合は11 *、実行するには、管理者を確保するための手続きを開始するには、スタートアップオブジェクトを使用して 12 * / 13 //は現在のWindowsユーザのログが示す取得 14 System.Security.Principal.WindowsIdentityアイデンティティ= System.Securityを。 Principal.WindowsIdentity.GetCurrent(); 15 System.Security.Principal.WindowsPrincipal新しい新しい校長= System.Security.Principal.WindowsPrincipal(アイデンティティ)。 @現在のログインユーザが管理者であるか否かを判断する16 起動操作を設定する29 //、管理者として必ず実行してください。 。17(principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator))IF {18である 。管理者は、直接実行する場合// 19 ; 20はApplication.Run(新しい新規のForm1())が 21である} 22他さ 23は、{である 24 / /開始オブジェクトの作成 )25 System.Diagnostics.ProcessStartInfo StartInfo新しい新しいSystem.Diagnostics.ProcessStartInfo =を(; 26 startInfo.UseShellExecute =真である; 27 startInfo.WorkingDirectory = Environment.CurrentDirectory; 28 startInfo.FileName = Application.ExecutablePath; 30 startInfo.Verb =「runasコマンド」; 31は試しています 32 { 33 System.Diagnostics.Process.Start(startInfo)。 34} 35キャッチ 36 { 37リターン。 38} 39 //退出 40 Application.Exit()。 41} 42} 43}
効果:それは)System.Diagnostics.Process.Startによって、また要求しませんVSは、管理者権限が必要です開始(そうVSによって直接実行外線通話の途中であるため、唯一のプログラム自体は、管理者権限を必要とし、アプリケーションを生成します異なるプログラム。これには二つの方法と実装との主な相違点です。
この記事のアドレス:http://www.cnblogs.com/Interkey/p/RunAsAdmin.html
方法2:アプリケーションを追加して、ファイルリスト:
プロジェクト内の「アプリケーションマニフェストファイル」を選択するために、新しい項目を追加し、[追加]ボタンをクリックします
添加した後、デフォルトでは意志、オープンapp.manifestファイル:
<のrequestedExecutionLevelレベル= "asInvoker" uiAccess = "偽" />
次のように改正:
<のrequestedExecutionLevelレベル= "requireAdministrator" uiAccess = "偽" />
そして、プロジェクトのプロパティを開いて、新しいapp.manifestのためのリソースの変更で[アプリケーション]タブを明示します。
プロジェクトを再ビルドし、それはあなたがプログラムを再度開いたときに、管理者権限で実行する必要が要求されます。
なお:あなたはVSでデバッガを起動した場合、それは、このタスクが昇格した権限を持つアプリケーションを必要と促します。図は次のとおりです。
再起動して、他の資格情報を使用することを選択します。
方法3:直接ファイル属性を変更します
プログラムファイル、ポップアップのプロパティ]ダイアログボックスの[互換性]タブを右クリックし、
「管理者としてこのプログラムを実行する」オプションをチェックしてください。
プログラムは、管理者として実行されているかどうかを確認
私たちは、名前空間を追加する必要があります。
System.Security.Principalを使用しました。
/// <summary> /// 确定当前主体是否属于具有指定 Administrator 的 Windows 用户组 /// </summary> /// <returns>如果当前主体是指定的 Administrator 用户组的成员,则为 true;否则为 false。</returns> public static bool IsAdministrator() { bool result; try { WindowsIdentity identity = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(identity); result = principal.IsInRole(WindowsBuiltInRole.Administrator); //http://www.cnblogs.com/Interkey/p/RunAsAdmin.html //AppDomain domain = Thread.GetDomain(); //domain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); //のWindowsPrincipalのWindowsPrincipal =(のWindowsPrincipal)のThread.CurrentPrincipal。 //結果= windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator)。 } キャッチ { 結果= FALSE; } 戻り値の結果; }
あなたが興味を持っている場合は、次のリンクを表示し続けることができます。
http://www.cnblogs.com/Lemon_s/archive/2011/07/28/2119222.html
http://www.cnblogs.com/shenchao/archive/2013/03/05/2944660.html