2

私が取り組んでいるインストーラーには、レジストリ要素を 64 ビット HKLM ハイブにインストールし、同様のキーを 32 ビット ハイブ (Wow6432Node の下) にインストールするコンポーネントがあります。インストール時に、ログに 64 ビットが表示されます。

MSI (s) (40:30) [13:29:49:879]: Executing op: RegOpenKey(Root=-2147483646,Key=SOFTWARE\Company\Product,,BinaryType=1,)
MSI (s) (40:30) [13:29:49:879]: Executing op: RegAddValue(Name=MyValueName,Value=MyValue,)
WriteRegistryValues: Key: \SOFTWARE\Company\Product, Name: MyValueName, Value: MyValue

その後、32ビット..

MSI (s) (40:30) [13:29:49:910]: Executing op: RegOpenKey(Root=-2147483646,Key=SOFTWARE\Wow6432Node\Company\Product,,BinaryType=1,)
MSI (s) (40:30) [13:29:49:910]: Executing op: RegAddValue(Name=MyValueName,Value=MyValue,)
WriteRegistryValues: Key: \SOFTWARE\Wow6432Node\Company\Product, Name: MyValueName, Value: MyValue

しかし、レジストリを調べてみるとHKLM\Software\Wow6432Node\Company\Product、値がありません。

4

2 に答える 2

0

提供されたデータで回答することは不可能です。おそらく、インストーラーが中止され、ロールバックされました。別のコンポーネントがレジストリ データを複製し、後で変更した可能性があります。おそらく、カスタム アクションが起動され、値がリセットされた可能性があります。または、ブートストラッパーの一部である別の MSI がそれを踏んだこともあります。

何が起こったのかを正確に知るために、インストーラーをテストする VM に時間を費やす必要があります。私が認識している WriteRegistryValues には体系的な問題はありません。

于 2013-10-23T21:03:54.657 に答える
0

「...以前のビルドから最新のビルドにアップグレードするときに問題が発生します」

これが事実であるため、私は次のようにします。

  • 32 ビット セクションと 64 ビット セクションを分割して、2 つの異なるコンポーネントを使用します。それは可能です。
  • 新しいコンポーネントのキー パスを、以前のインストールで設定されていない場所に設定します。つまり、両方のコンポーネントにキーパスがあり、それらが異なることを確認してください。
  • 両方のコンポーネントに対して「コンポーネント条件の再評価」(推移的コンポーネント) を有効にします。これにより、再インストール中にインストールされたコンポーネントの状態が再評価されます。つまり、システムにインストール、再インストール、または削除するかどうかを決定します。

以前のインストールのコンポーネント キー パスが再インストール時に存在する場合、コンポーネントは全体としてのみインストールされるか、まったくインストールされないため、64 ビットを有効にして効果的に追加した新しいレジストリ キーはインストールされません。

于 2014-02-19T12:39:05.673 に答える