VistaおよびWindows 7以降では、UAC(ユーザーアカウント制御)というセキュリティ機構が追加されており、UACが有効になると、ユーザーが管理者権限でログインしても、アプリケーションはシステムディレクトリやシステムレジストリ、その他の設定に書き込むことができず、これがシステムの通常の動作に影響を及ぼす可能性があります。 この仕組みはシステムのセキュリティを大幅に強化しますが、アプリケーション開発者に対してUACを強制的にオフにすることはできません。ただ、時には開発するアプリケーションが管理者のように動作する必要がある場合もあります。どうやってその機能を実現するのでしょうか? C#プログラムがユーザーに管理者権限で実行するプロンプトをどのように実装しているかをご紹介します。 この例では、WinFormプログラムが新しいプロジェクトを生成し、それに応じて修正していることを示しています。 方法1:System.Diagnostics.Process.Start()経由でスタート: 実装方法:デフォルトで生成されたプログラムファイルを修正し、修正されたコードは以下の通りです: コードはすでにコメントされているため、詳細には触れません。 効果:System.Diagnostics.Process.Start(の外部呼び出し)を呼び出して起動するため、VSを直接実行している場合、VSに対して管理者権限の必要性を促すのではなく、プログラム自体のみが管理者権限を必要とします。これはアプリケーションを生成するプログラムとは異なります。 これが方法2の実装との主な違いです。 方法2:アプリケーションマニフェストファイルを追加することで: プロジェクト「新しい項目を追加」で「Application Manifest File」を選択し、「追加」ボタンをクリックします 追加されると、app.manifestファイルはデフォルトで開かれ、以下のような動作があります: 修正内容: 次にプロジェクトプロパティを開き、アプリケーションタブのリソースでマニフェストを新しいapp.manifestに修正します。 プロジェクトを再構築し、再度プログラムを開くと管理者権限で実行するよう促されます。 VSでデバッグを始めると、このタスクにはアプリケーションの権限が昇格する必要があると促されます。 以下に示すように: 「他の認証情報で再スタート」を選択して実行してください。 方法3:プログラムファイルのプロパティを直接変更する プロパティダイアログボックスの互換性タブでプログラムファイルを右クリックしてください 「管理者としてこのプログラムを実行する」をチェックしてください。
|