85

この質問はWindowsVistaに当てはまります。

通常は管理者権限がなくても動作するアプリケーションがあります。管理者権限を必要とするアクティビティが1つありますが、ほとんどの場合、ユーザーがその機能を使用しないことがわかっている場合は、アプリケーション自体をより高い権限で起動したくありません。

あるイベント(ボタンを押すなど)でアプリケーションの権限を上げることができる特定の方法を考えています。例:

ユーザーがこのボタンをクリックすると、UACダイアログまたは同意が表示されます。これどうやってするの?

4

6 に答える 6

59

現在実行中のプロセスを引き上げることは不可能だと思います。私が理解しているように、Windows Vistaには、起動時に管理者権限がプロセスに付与されることが組み込まれています。UACを利用するさまざまなプログラムを見ると、管理アクションを実行する必要があるたびに、実際には別々のプロセスが起動することがわかります(タスクマネージャーが1つ、Paint.NETがもう1つ、後者は実際には.NETアプリケーションです)。 )。

この問題の一般的な解決策は、昇格されたプロセスを起動するときにコマンドライン引数を指定することです(abatishchevの提案はこれを行う1つの方法です)。これにより、起動されたプロセスは特定のダイアログボックスを表示することだけを認識し、このアクションが実行された後に終了します。完了しました。したがって、新しいプロセスが起動されて終了したことはユーザーにはほとんど気付かれず、同じアプリ内の新しいダイアログボックスが開かれたように見えます(特に、ハッカーがメインウィンドウを作成する場合)昇格されたプロセスは親プロセスの子です)。昇格されたアクセスにUIが必要ない場合は、さらに良いでしょう。

VistaでのUACの詳細については、このテーマに関する記事をよく読んでください(コード例はC ++ですが、C#でほとんどのことを行うにはWinAPIとP/Invokeを使用する必要があると思います。とりあえず)。UAC準拠のプログラムを設計することは簡単ではありませんが、少なくとも正しいアプローチを理解できれば幸いです...

于 2009-02-21T14:50:53.963 に答える
17

そこに言われたように:

Process.StartInfo.UseShellExecute = true;
Process.StartInfo.Verb = "runas";

管理者としてプロセスを実行し、レジストリで必要なことをすべて実行しますが、通常の権限でアプリに戻ります。

于 2009-02-21T14:23:05.090 に答える
13

次の MSDN KB 記事 981778 では、アプリケーションを「自己昇格」する方法について説明しています。

http://support.microsoft.com/kb/981778

Visual C++、Visual C#、Visual Basic .NET のダウンロード可能なサンプルが含まれています。

このアプローチは、別のプロセスを開始する必要性を回避しますが、実際には、再起動されるのは元のアプリケーションであり、昇格されたユーザーとして実行されます。それにもかかわらず、これは、コードを別の実行可能ファイルに複製することが現実的ではないいくつかのコンテキストでは、依然として非常に役立つ場合があります。

標高を削除するには、アプリケーションを終了する必要があります。

于 2012-10-24T14:16:35.683 に答える
5

COMオブジェクトとして昇格して実行するには、UACモニカとコードが必要です。

この質問を参照してください。

MSDNのドキュメント。

于 2009-02-21T14:16:25.420 に答える
1

これが古い投稿であることは承知していますが、これは MarcP の提案に出くわした他の人への返信です。彼が参照した msdn の投稿では、すべてのコード例で実際にアプリケーションを再起動しています。コード サンプルではrunas、​​他の提案で既に提案されている動詞を使用しています。

確認のためにコードをダウンロードしましたが、これは元の msdn 記事からのものです。

4. [はい] をクリックして昇格を承認します。その後、元のアプリケーションが再起動し、昇格された管理者として実行されます。
5. アプリケーションを閉じます。

于 2013-04-16T19:46:35.983 に答える