2

MSM をビルドしようとしたときに、この問題に遭遇しました。どうやら、モジュールのプロパティ (およびそのすべての識別子) は、モジュールの生成中に名前の末尾にモジュール GUID を追加することによって名前が変更されます。たとえば、プロパティ「MY_PROPERTY」は「MY_PROPERTY.803A3089_928F_46F1_BBAE_CBD39A7D6A72」に名前が変更されます (803A3089-928F-46F1-BBAE-CBD39A7D6A72 がモジュール GUID であると仮定)。これは、同じ名前の識別子を使用しようとする複数のモジュール間の競合を防ぐために使用されるメカニズムだと思います。

MSM 内から、特定のプロパティに何らかの値を設定する必要がある DLL カスタム アクションを呼び出す必要があります (「THE_PROPERTY」と呼びましょう)。問題は、THE_PROPERTY の名前が上記のように THE_PROPERTY.803A3089_928F_46F1_BBAE_CBD39A7D6A72 に変更されるため、カスタム アクションがプロパティを見つけられず、失敗することです。

この問題を解決する方法はありますか? カスタム アクションを変更して、それが呼び出されているモジュールの GUID を (何らかの方法で) 把握しようとすることを考えていました。これを行う 1 つの方法は、現在のアクション名を確認することです。これには、GUID も含まれている必要があります。しかし、カスタム アクション内から現在のアクション名を取得できますか? 別の解決策を考えられますか?

ありがとう!

4

1 に答える 1

2

実際、マージ モジュール内のプロパティには、プロパティ名の後にモジュール GUID を使用してアクセスします。

適切な解決策は、カスタム アクションが THE_PROPERTY の代わりに THE_PROPERTY.803A3089_928F_46F1_BBAE_CBD39A7D6A72 にアクセスするようにすることです。

別の解決策は、タイプ 51 カスタム アクションを使用することです。

  • MSI で、フォーマットされたカスタム アクション (タイプ 51) でプロパティ セットを作成します。
  • THE_PROPERTY を次のように設定するように構成します。

    [THE_PROPERTY.803A3089_928F_46F1_BBAE_CBD39A7D6A72]

  • THE_PROPERTY を読み取るカスタム アクションの前にスケジュールします。

このようにして、マージ モジュール プロパティは、カスタム アクションで使用される名前を持つ MSI プロパティに保存されます。

タイプ 51 カスタム アクションは、セットアップ オーサリング ツールごとに異なる方法で追加されます。正確な手順が必要な場合は、使用しているセットアップ ツールをお知らせください。Visual Studio はこれをサポートしていません。

于 2011-11-01T18:48:05.193 に答える