NTService ищет неправильный файл конфигурации

Я работаю над переносом набора инсталляторов из VS2010 в WIX и обнаружил ошибку в наших приложениях службы NT.

После создания и установки службы NT с помощью установщика WIX служба не ищет файл app.config, названный так, как вы ожидаете (ApplicationName.exe.config). Наше имя приложения сродни XXX.YYYYYYYY, и при внедрении отладчика в службу во время запуска я вижу, что оно ищет XXX.config вместо XXX.YYYYYYY.exe.config.

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

Есть ли какая-то настройка в wxi3.8, которую я пропускаю, или ввод неправильного значения, которое могло бы вызвать это? Вот сегмент wxs, который управляет сервисом:

<Component Id="Service" Guid="DCE18608-D25F-4DC0-9E1B-C2E3575D0BFE">
<File Id="ServiceComponentMain" Name="$(var.XXX.YYYYYYY.TargetName)" Source="$(var.HHG.SpecOrderLoadSync.TargetPath)"
      DiskId="1" Vital="yes" KeyPath="yes"/>
<ServiceInstall Id="Service" Name="$(var.XXX.YYYYYYY.TargetName)" Type="ownProcess" DisplayName="$(var.XXX.YYYYYYY.TargetName)"
                Description="$(var.XXX.YYYYYYY.TargetName)" Start="auto" Account="NT AUTHORITY\LocalService" ErrorControl="normal">
    <util:PermissionEx User="Everyone" ServicePauseContinue="yes" ServiceQueryStatus="yes"
                       ServiceStart="no" ServiceStop="yes" ServiceUserDefinedControl="yes"/>
</ServiceInstall>
<ServiceControl Id="Service" Stop="both" Remove="both" Name="$(var.XXX.YYYYYYY.TargetName)" Wait="no"/>

1 ответ

Решение

Наконец-то понял это после того, как покопался в реестре. Похоже, что в моем текущем wsx-файле он не регистрирует полный путь к исполняемому файлу, включая ".exe" в конце. Это то, что приводит к путанице в имени файла конфигурации. Почему в мире это имеет значение вне меня, но я думаю, просто еще одна вещь, которая раздражает меня из-за окон...

Чтобы исправить, изменение имени элемента File в указанном выше сегменте на $(var.XXX.YYYYYYY.TargetName).exe вместо просто $ (var.XXX.YYYYYYY.TargetName) работает.

Другие вопросы по тегам