web-dev-qa-db-ja.com

要求されたレジストリアクセスは許可されていません

_HKEY_CLASSES_ROOT_の下のいくつかのキーを変更するTweakユーティリティを書いています。

すべてWindowsで正常に動作しますXPなど。しかし、Windows 7でエラー_Requested registry access is not allowed_が発生しています。Vistaおよび2008も推測します。

コードを変更してUACサポートを追加するにはどうすればよいですか?

43
abatishchev

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>
56
abatishchev

管理者特権がない限り、Vista以降のWindowsのHKCR(またはHKLM)ハイブに書き込むことはできません。したがって、ユーティリティを実行する前に管理者としてログインするか、管理者レベル(管理者ログイン情報をユーザーに要求します)を要求するマニフェストを与えるか、または-管理者はプレイしないでください。 :-)

18
Ken White

アプリ全体の管理者権限が必要ない場合、またはごくまれに変更する場合にのみ必要な場合は、新しいプロセスで変更を行い、次を使用して起動できます。

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

管理者としてプロセスを実行し、レジストリで必要なことをすべて行いますが、通常の権限でアプリに戻ります。この方法では、起動するたびにユーザーにUACダイアログが表示されることはありません。

17
Davy8

一時的な修正として、ユーザーはユーティリティを右クリックして「管理者として実行」を選択できます。

5
Brian

私はverb = "runas"、しかし、レジストリ値を更新しようとすると、UnauthorizedAccessExceptionが発生していました。判明したのは、writeableをtrueに設定してサブキーを開かなかったことが原因でした。

Registry.OpenSubKey("KeyName", true);

レジストリキーに書き込めません、UnauthorizedAccessExceptionを取得します

2
Despertar

この問題は、アプリケーションが実行されるユーザーアカウントに必要な承認を与えることに関係しています。マイクロソフトが文書化したように、同様の状況と正しいソリューションの詳細な応答を読むには、この投稿を気軽にご覧ください。 http://rambletech.wordpress.com/2011/10/17/requested-registry- access-is-not-allowed /

1
Ozzie

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>
0
Last Resort