1

次を使用してレジストリアクセスを要求する既存のプログラムがあります。

RegistryPermission permission = new RegistryPermission(RegistryPermissionAccess.AllAccess, strCheckPermission);
permission.Demand();

これは、Windows XP から Windows 7 まで、および Windows Server 2003 および 2008 では問題なく動作します。ただし、これを Windows 8 で実行すると、このアクセス許可セットを要求しても、まだサブキーを作成できません。

Registry.LocalMachine.OpenSubKey("Software", true).CreateSubKey("myCompany")

ここで何がうまくいかないのか誰か知っていますか?

更新: 例外のスタック トレース:

System.UnauthorizedAccessException: Cannot write to the registry key.
   at Microsoft.Win32.RegistryKey.EnsureWriteable()
   at Microsoft.Win32.RegistryKey.CreateSubKey(String subkey, RegistryKeyPermissionCheck permissionCheck, RegistrySecurity registrySecurity)
4

1 に答える 1

3

コード アクセス セキュリティのアクセス許可と Windows の権限を混同しています。CAS は、レジストリ キーへのアクセスを許可するために何もしません。許可が無効になっていないことを確認するだけです。めったにありませんが、ほとんどの .NET アプリは完全な信頼で実行されます。

これはウィンドウ アクセス権の問題です。ユーザー アカウントにキーを書き込む権限がありません。これは珍しいことではありませんが、HKLM キーは UAC 昇格でのみ書き込むことができます。昇格を要求するには、マニフェストを埋め込む必要があります。詳細については、この回答を確認してください。

さらに Windows 8 固有の詳細は WinRT です。「Windows ストア」アプリはそのようなキーを書き込むことはできず、そのための回避策はありません。

于 2012-09-06T12:33:57.610 に答える