_HKEY_CLASSES_ROOT
_の下のいくつかのキーを変更するTweakユーティリティを書いています。
すべてWindowsで正常に動作しますXPなど。しかし、Windows 7でエラー_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);
この問題は、アプリケーションが実行されるユーザーアカウントに必要な承認を与えることに関係しています。マイクロソフトが文書化したように、同様の状況と正しいソリューションの詳細な応答を読むには、この投稿を気軽にご覧ください。 http://rambletech.wordpress.com/2011/10/17/requested-registry- access-is-not-allowed /
Abatishchevと同じですが、UACは使用できません
<Assembly manifestVersion="1.0" xmlns="urn:schemas-Microsoft-com:asm.v1">
<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">
</requestedPrivileges>
</security>
</trustInfo>
</Assembly>