4

ソフトウェアを (Wix) インストールしたい 2 つの仮想マシンがあります。1 つは Windows XP SP2 で、もう 1 つは Windows XP SP1 です。どちらもドメインを使用しておらず、どちらも管理者権限を持つローカル ユーザー管理者を持っています。

RegAsm.exe を実行して MyApp.dll を SP3 のマシンに登録すると、ProgId が次のフォルダーに配置されます。

HKEY_CLASSES_ROOT\MyAppProgId

HKEY_LOCAL_MACHINE\Software\Classes\MyAppProgId

一方、SP2 マシンで実行すると、次のフォルダーに配置されます。

HKEY_CLASSES_ROOT\MyAppProgId

HKEY_CURRENT_USER\Software\Classes\MyAppProgId

サービスから MyApp.dll を読み込もうとしているときに、これを見つけました。RegAsm.exe と Heat.exe から生成されたレジストリ ファイルは、どちらも HKEY_CLASSES_ROOT を更新しているようです。

誰がこれを引き起こす可能性があるか知っていますか?

編集: HKCR の代わりに HKEY_LOCAL_MACHINE に直接書き込むことで、これを回避することになりました。これには、生成された .reg ファイルまたは .wxs ファイルを手動で編集することが含まれていました。

4

1 に答える 1

3

古いセットアップHKEY_LOCAL_MACHINEでは通常のユーザーが書き込み可能ですが、新しい Windows (Windows 7 など) では書き込み可能ではありません。構成、ユーザー アカウントの種類などによって異なる場合があります。

登録されたクラスは、HKEY_LOCAL_MACHINE\SOFTWARE\Classes(前述のように書き込み可能な場合もあります) またはHKEY_CURRENT_USER\Software\Classes(常に書き込み可能) のいずれかに移動します。どちらも機能します。最初のケースは圧倒的なデフォルトです。

HKEY_CLASSES_ROOT実際には、前述のブランチの内容をマージする単なるビューです。これが、2 つの異なる場所の下に表示される理由です。

RegAsm は HKLM の読み取り専用状態を検出するのに十分スマートで、代わりに HKCU を自動的に選択します。または、VM 間で異なる構成設定があります。

主な違いは、2 番目のケースでは、dll は登録したユーザー アカウントでのみ使用できることです。サービスはおそらく別のアカウントで実行されているため、2 台目のマシンで dll をロードできません。

于 2012-04-12T08:50:33.440 に答える