私のC#アプリケーションでは、アプリケーションの起動時に常に仰角を求めたくはありませんが、UACで保護されている出力パスを選択すると、高度を要求する必要があります。パスが保護されている場合、Windows VistaのUAC標高を要求しますか?
したがって、パスがUACで保護されているかどうかを確認するにはどうすればよいのですか?
私のC#アプリケーションでは、アプリケーションの起動時に常に仰角を求めたくはありませんが、UACで保護されている出力パスを選択すると、高度を要求する必要があります。パスが保護されている場合、Windows VistaのUAC標高を要求しますか?
したがって、パスがUACで保護されているかどうかを確認するにはどうすればよいのですか?
アクションを実行できないかどうかを検出する最善の方法は、試行してUnauthorizedAccessException
をキャッチすることです。
ただし、@DannySmurfcorrectly points outは、COMオブジェクトを昇格するか、別のプロセスにすることしかできません。
UAC DemoというWindows SDKのクロステクノロジーサンプルには、デモンストレーションアプリケーションがあります。このデモンストレーションアプリケーションは、昇格したプロセスでアクションを実行する方法を示しています。また、ユーザーが現在管理者であるかどうかを調べる方法も示します。
要求標高半ば実行が必要とあなたのどちらか:
現在、実行中のプロセスを昇格させる方法はありません。あなたは上記のハッカーのことの一つをしなければなりませんが、現在のプロセスが上がっている様子をユーザに伝えるだけです。
パスがUACであるかどうかを確認するには、昇格していない状態で、例外をキャッチして、再度試してみてください。
注こと - それはユーザーアカウント制御システムの一般的な制限事項です。 –
これはUACの制限ではないことに注意してください.Windows NTのセキュリティモデルの一般的な制限です(実行中のプロセスはセキュリティトークンを変更できません)。 –
悪意のある攻撃者がコードを事前昇降プロセスに注入する可能性があり、このコードはこのプロセスと共に上昇する可能性があることに注意してください。 – ghord
パスが保護されていることをユーザーに通知し、ファイルを「安全な」領域に出力するように要求することができます。この方法であなたのアプリは高度を必要としません。私はそれがあなたのユーザとあなたがやろうとしていることに依存していると確信していますが、Windows/System32フォルダにxyzをダンプしてもらえないことをユーザに知らせるのは大変だとは思いません。
セカンダリドライブに独自のファイル権限がある場合は、他のWindowsコピーがインストールされているようなものです。プロンプトが表示されます。
また、ファイルが使用中であるかどうかを確認するメッセージが表示されます。これは、同じエクスプローラで開いているウィンドウエクスプローラとファイルプレビューアで選択したファイルがコンテンツを表示している場合に発生します。ファイルが使用されているか、またはそれが機密のディレクトリである場合にファイル許可を求められます。
FolderBrowserDialogをループする場合は、その理由をユーザーに知らせるようにしてください。そうすれば、アプリで気にならないでしょう。
注:アクセス権を尋ねるネット方法はありません。おそらくp/win32 APIを呼び出すのでしょうか?
P/Invokingは何も変更しません。あなたが管理されているかどうかに関わらず、UACのルールは同じです。それはCOM、外部プロセス、またはバストです。 –
UACが自分のGUIDに基づいてオブジェクトを高めることができ、これは(理論的には)GUIDを持つ任意のクラスが上昇することができることを意味し、UACDemoもこの
が、私はそれかどうかわからないんだけど行う方法を示すべきですあなたのための任意のヘルプのですが、このブログの記事を見てとることができます。これは、.NETの制限ではありません
http://haishibai.blogspot.com/2010/01/tiy-try-out-windows-7-uac-using-c-part_26.html
UACのデモへのいい言及は、私が必要としていたものです。どうもありがとう。私は時には多くの担当者を与えることができれば欲しい! – Ryan
@ライアンようこそ。 UACが管理された環境にあるように見えるのは少し不満です。私のユーザープロフィールを閲覧して、他の質問をアップしてもよろしいですか? :) –
ところで、例外名はUnauthorizedAccessExceptionで、zはUnauthorizedです。それだけ ;) –