私のC#アプリでは、アプリケーションの起動時に常に昇格を要求する必要はありませんが、UACで保護されている出力パスを選択した場合は、昇格を要求する必要があります。
では、パスがUACで保護されているかどうかを確認し、実行中に昇格を要求するにはどうすればよいですか?
私のC#アプリでは、アプリケーションの起動時に常に昇格を要求する必要はありませんが、UACで保護されている出力パスを選択した場合は、昇格を要求する必要があります。
では、パスがUACで保護されているかどうかを確認し、実行中に昇格を要求するにはどうすればよいですか?
アクションを実行できないかどうかを検出する最善の方法は、アクションを試みてUnauthorizedAccessException
.
ただし、@ DannySmurfが 正しく指摘しているように、昇格できるのは COM オブジェクトまたは個別のプロセスのみです。
UAC Demoと呼ばれる Windows SDK Cross Technology Samples 内にデモ アプリケーションがあります。このデモ アプリケーションは、昇格されたプロセスでアクションを実行する方法を示しています。また、ユーザーが現在管理者であるかどうかを確認する方法も示します。
実行中に昇格を要求するには、次のいずれかが必要です。
.NETでは、現在、実行中のプロセスを昇格させる方法はありません。上記のハッカリーなことの1つを実行する必要がありますが、それは、現在のプロセスが昇格しているようにユーザーに見せることだけです。
パスがUACで昇格されているかどうかを確認する唯一の方法は、昇格されていない状態のときに、パスに簡単な書き込みを試み、例外をキャッチし、昇格して再試行することです。
参考になるかどうかはわかりませんが、次のブログ記事をご覧ください。
http://haishibai.blogspot.com/2010/01/tiy-try-out-windows-7-uac-using-c-part_26.html
パスが保護されていることをユーザーに通知し、ファイルを「より安全な」領域に出力するようにユーザーに依頼することをお勧めします。このように、アプリは標高を必要としません。ユーザーと何をしようとしているのかにもよると思いますが、xyzをWindows/System32フォルダーにダンプしても問題ないとユーザーに知らせても大したことではないと思います。
セカンダリドライブに独自のファイル権限がある場合、たとえば、他のWindowsのコピーがインストールされている場合。プロンプトが表示されます。
また、ファイルが使用されているかどうかも確認されます。これは、Windowsエクスプローラーを同じディレクトリで開いていて、ファイルプレビューアでファイルを選択して内容を表示している場合に発生することがあります...他にも奇妙な点がいくつかありますが、通常はファイルを要求されますファイルが使用中または機密ディレクトリである場合のアクセス許可。
FolderBrowserDialogをループする場合は、ユーザーに理由を通知して、アプリに腹を立てないようにしてください。
注:許可を求める.netの方法がないことは悪臭を放ちます。おそらく、win32apiをp/invokeします...?
UAC は GUID に基づいてオブジェクトを昇格できます。これは (理論的には) GUID を持つ任意のクラスを昇格できることを意味します。UACDemo はこれを行う方法も示す必要があります。