[解決済み] 必要なときだけ特権を昇格させるには?
質問
この質問は Windows Vista に当てはまります!
通常、管理者権限なしで動作するアプリケーションを持っています。管理者権限が必要なアクティビティが 1 つありますが、ほとんどの場合、ユーザーはその機能を使用しないことがわかっているので、より高い権限でアプリケーション自体を開始したくありません。
私は、あるイベント (ボタンを押すなど) でアプリケーションの特権を昇格させることができる、ある方法について考えています。例
ユーザーがこのボタンをクリックすると、UACダイアログまたは同意のプロンプトが表示されます。どうすればよいのでしょうか。
どのように解決するのですか?
現在実行中のプロセスを昇格させることは不可能だと思います。Windows Vista では、起動時にプロセスに管理者権限が与えられるように組み込まれていると私は理解しています。UAC を使用するさまざまなプログラムを見てみると、管理者アクションを実行する必要があるたびに、実際には別のプロセスが起動することがわかります (タスク マネージャーがその 1 つ、Paint.NET がその 1 つで、後者は実際には .NET アプリケーションです)。
この問題に対する典型的な解決策は、昇格プロセスを起動するときにコマンド ライン引数を指定し (abatishchev の提案はこれを行う 1 つの方法です)、起動したプロセスが特定のダイアログ ボックスを表示することしか知らず、このアクションが完了した後に終了するようにすることです。このため、新しいプロセスが起動され、終了したことはユーザーにはほとんど気づかれず、むしろ同じアプリ内で新しいダイアログボックスが開かれたように見えるはずです(特に、昇格プロセスのメインウィンドウを親プロセスの子プロセスにするハッキングを行った場合はそうなります)。昇格したアクセスに UI が必要ない場合は、なおさらです。
Vista での UAC の完全な議論については、以下を参照することをお勧めします。 この非常に分かりやすい記事 を参照することをお勧めします (コード例は C++ ですが、C# でほとんどのことを行うには WinAPI と P/Invoke を使用する必要があると思われます)。UAC 準拠のプログラムを設計するのは簡単ではありませんが、少なくとも取るべき正しいアプローチを理解していただけると幸いです...。
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] 辞書を繰り返し使用するには?
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] DateTime型の誕生日から年齢を計算するにはどうしたらいいですか?
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] async」と「await」の使い方とタイミング
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み] 要求されたレジストリへのアクセスは許可されていません