WIX を使用してアプリケーションのインストーラーを作成しています。これまでのところ、すべて正常に動作しています。しかし、インストール中に新しいイベント ソースを作成しようとしていますが、期待どおりに動作しません。
SO でこの質問を読んで理解しましたが、特定のソリューションが適切に機能していないように見える状況が多少異なります。以下は別の方法で行われます。
- を使用して
WixNetFxExtension
、起動条件として .NET 3.5 がインストールされているかどうかを判断しています。 - here
WixUtilExtension
で説明されているように、32ビット/64ビットビルド用に構成するために を使用しています
私がやりたいのは、32 ビット インストールを行うときは 32 ビット フレームワークのイベント メッセージ ファイルを使用し、それ以外の場合は 64 ビット フレームワークのイベント メッセージ ファイルを使用することです。
上記のリンクされた SO の質問のコメントの 1 つは、次を使用して、システムに 32 ビット フレームワークのイベント メッセージ ファイルを使用させることを提案しています。
<util:EventSource
Log="Application"
Name="*source name*"
EventMessageFile="[NETFRAMEWORK20INSTALLROOTDIR]EventLogMessages.dll"/>
両方のタイプのセットアップを説明するためにこれを変更しました。
<?if $(var.Platform) = x64 ?>
<util:EventSource Log="..." Name="..." EventMessageFile="[NETFRAMEWORK20INSTALLROOTDIR64]EventLogMessages.dll" />
<?else ?>
<util:EventSource Log="..." Name="..." EventMessageFile="[NETFRAMEWORK20INSTALLROOTDIR]EventLogMessages.dll" />
<?endif ?>
ファイルの先頭では、同じ<?if ...
条件が機能し、それに応じて製品名とフォルダー名が変更されます。
そのコードの上のいくつかの行では、.NET Framework の検出を可能にするために次を使用しています。
<PropertyRef Id="NETFRAMEWORK35"/>
<PropertyRef Id="NETFRAMEWORK20"/>
<Condition Message="...">
<![CDATA[Installed OR NETFRAMEWORK35]]>
</Condition>
インストーラーを実行すると、すべてが機能しているように見え、イベント ソースも作成されます。アプリケーションからも使用できますが、イベント メッセージ ファイルが見つからないという情報が引き続き表示されます。レジストリを調べると、メッセージ ファイルへのパスが見つからないことがわかりました。
EventMessageFile REG_EXPAND_SZ EventLogMessages.dll
32 ビット/64 ビット フレームワークへのパスも存在することを期待していますが、先頭に追加されていないようです。
ここで何が間違っていますか?