0

いくつかのレジストリ キーを使用する .net 4.0 アプリと、セットアップ時にそれらのキーを作成する vs2010 セットアップ & 展開プロジェクトがあります。

問題 - (デフォルト) RegEdit はキーが存在することを示しますが、.net コードは OpenSubKey で正しいパス ( \ を含む) で null を返します。

結局のところ、これはKB305097による 32 ビットおよび 64 ビットのレジストリによるもの です。

そして、次のようなコードが必要です

RegistryKey someFunc()
{
    var r64o32 = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, 
                Environment.Is64BitOperatingSystem  ? RegistryView.Registry64 :    
           RegistryView.Registry32);

    return r64o32.OpenSubKey(regKey);
}

ただし、32 ビット マシンを使用できないため、上記のコードをテストできませんが、アプリは 32​​ ビット マシンでも使用できる必要があります。

ヘルプを探しています -

  1. 上記のアプローチは 64/32 ビットの両方で正しいですか?
  2. vs2010 セットアップ プロジェクトによって作成されたセットアップは、マシンに基づいて 64/32 レジストリに定義されたレジストリ エントリをインストールしますか?
  3. 他の落とし穴はありますか?
4

1 に答える 1

0

アプリケーションのコンパイル方法に関係なく、レジストリの特定のビューを要求しているため、特別なケースRegistryViewを使用する必要はありません。OpenBaseKey

RegistryKey r = Microsoft.Win32.RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, 
                                                        RegistryView.Registry64);

また、32 ビット マシンを使用している場合、OpenBaseKey は Registry32 にフォールバックするだけであることも覚えておいてください。

于 2012-10-12T04:14:05.737 に答える