0

Installshiled 2008 Premier Edition で MSI パッケージを開発しました。プロジェクト タイプは Installscript MSI です。最近 2011 を購入し、プロジェクトを 2011 にアップグレードしました。

以前のバージョンでは、Microsoft SQL Express のレジストリ エントリを確認していましたが、そのパスは次のとおりです。

**HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL**

OS は 64 ビットですが、64 ビットの SQL Express のレジストリ パスは

**HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server\Instance Names\SQL**

レジストリ関数RegDBKeyExistsは SQL レジストリの存在を確認するためのものですが、関数は-2147483646として負の数を返し、読み取りに失敗します。

REGDB_OPTIONS = REGDB_OPTIONS | REGDB_OPTION_WOW64_64KEY64 ビット関連のレジストリ ハイブを読み取らないため、オプションを設定しても役に立ちません。

4

2 に答える 2

1

あまり心配しないでください。レジストリ リフレクションにより、余分なコードを追加することなく、これが正しく行われます。32 ビット アプリがHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL64 ビット マシンでアクセスすると、リダイレクトされて表示されます(に相当する -HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server\Instance Names\SQLを渡さない限り)。KEY_WOW64_64KEYREGDB_OPTION_WOW64_64KEY

Wow6432Node キーをクエリにハードコードすると、このシナリオでは、パスを含むパスの下にキーが表示され、HKLM\Software\Wow6432Node\Wow6432Node\...見つけようとしていたキーを見つけることができない傾向があります。

于 2011-02-10T14:53:22.270 に答える