WIX: создание источника событий using.NET файл сообщений


Я создаю установщик для своего приложения с помощью WIX. Пока все работает нормально. Однако я пытаюсь создать новый источник событий во время установки, и это не работает должным образом.

Я прочитал и понял этот вопрос здесь на SO, но у меня есть несколько другая ситуация, в которой данное решение, кажется, не работает должным образом. Следующее делается иначе:

  1. я использую WixNetFxExtension, чтобы определить, установлен ли .NET 3.5 как условие запуска.
  2. я использую WixUtilExtension для настройки материала для 32-битных / 64-битных сборок, как это описано здесь

Вот что я хотел бы сделать: используйте файл сообщений о событиях 32-разрядной платформы при выполнении 32-разрядной установки, в противном случае используйте файл сообщений о событиях 64-разрядной платформы.

Один из комментариев в приведенном выше связанном вопросе SO предлагает использовать следующее, чтобы система использовала файл сообщений о событиях 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-битному фреймворку тоже будет присутствовать,но он, похоже, не предваряется.

Что я здесь делаю не так?

1 4

1 ответ:

Я только что столкнулся с этим, вам нужно PropertyRef NETFRAMEWORK20INSTALLROOTDIR и NETFRAMEWORK20INSTALLROOTDIR64 (также убедитесь, что ссылка на WinNetFxExtension имеется).