の下のいくつかのキーを変更する微調整ユーティリティを書いていますHKEY_CLASSES_ROOT。
WindowsXPなどではすべて正常に動作します。しかし、Windows7ではエラーが発生Requested registry access is not allowedします。Vistaと2008もそうだと思います。
UACサポートを追加するには、コードをどのように変更する必要がありますか?
app.manifestこのようにする必要があります:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</asmv1:assembly>
管理者権限がない限り、Vista以降のバージョンのWindowsでHKCR(またはHKLM)ハイブに書き込むことはできません。したがって、ユーティリティを実行する前に管理者としてログインするか、管理者レベルが必要であることを示すマニフェストを提供するか(ユーザーに管理者ログイン情報の入力を求める)、またはそれ以外の場所での変更をやめる必要があります。 -管理者は遊んではいけません。:-)
アプリ全体に管理者特権が必要ない場合、またはいくつかのまれな変更のみに必要な場合は、新しいプロセスで変更を行い、次を使用して起動できます。
Process.StartInfo.UseShellExecute = true;
Process.StartInfo.Verb = "runas";
これにより、管理者としてプロセスが実行され、レジストリで必要なことは何でも実行されますが、通常の権限でアプリに戻ります。このようにして、起動するたびにユーザーに UAC ダイアログが表示されることはありません。
一時的な修正として、ユーザーはユーティリティを右クリックして [管理者として実行] を選択できます。
を試していましたverb = "runas"が、レジストリ値を更新しようとすると、まだ UnauthorizedAccessException が発生していました。writeable を true に設定してサブキーを開いていないことが原因であることが判明しました。
Registry.OpenSubKey("KeyName", true);
この問題は、アプリケーションを実行するユーザー アカウントに必要な承認を付与することに関係しています。Microsoft によって文書化されている、同様の状況と正しい解決策に対する詳細な回答を読むには、次の投稿にアクセスしてください。禁止されている/