Настройка ключевого пути при автоматическом сборе проекта

Я использую справочную функцию проекта WiX, чтобы автоматически собрать проект с помощью Heat. Это особенно полезно, поскольку установщик WiX собирается как локально, так и на сервере сборки TFS2010, а когда он построен на сервере сборки, вывод перенаправляется в другое место, что означает, что если я не собираю проекты автоматически, он получает очень грязно, пытаясь указать правильное местоположение для недавно скомпилированных элементов.

У меня есть следующий WiX-код для установки и запуска службы:

<ServiceInstall Id="MyService"
 Type="ownProcess"
 Vital="yes"
 Name="MyServiceName"
 DisplayName="My Service Display Name"
 Description="My Service Description"
 Start="auto"
 Account="[SERVICEACCOUNT]"
 Password="[SERVICEPASSWORD]"
 ErrorControl="ignore"
 Interactive="no" />
<ServiceControl Id="StartService" Name="MyServiceName" Start="install" Wait="no" />
<ServiceControl Id="StopService" Name="MyServiceName" Stop="both" Wait="yes" Remove="uninstall" />

Пока все хорошо... У меня возникает проблема, когда установщик пытается установить и запустить службы Windows, однако сообщая, что "Служба" MyServiceName "(MyServiceName) не запустилась. Убедитесь, что у вас достаточно прав для запуска системных служб". Если я выбираю кнопку "Игнорировать", установка завершается "успешно", но когда я проверяю службы, установленные на моем компьютере, новая служба не отображается в списке.

Из моих онлайн-исследований я считаю, что проблема заключается в том, что служба на самом деле не устанавливается правильно, потому что мне нужно установить для KeyPath исполняемый файл, который должен запускаться как служба, но так как я собираю файлы с помощью Heat, я я не могу найти способ сделать это... если я не создаю настраиваемое действие, которое установит для меня службу, позволяющую указать имя исполняемого файла после установки всех файлов... но это не похоже на это должно быть правильное решение...

У кого-нибудь есть совет, или они столкнулись с той же проблемой и нашли решение?

Спасибо

ОБНОВЛЕНИЕ 07/10/10: В моем скрипте WiX у меня есть следующее:

<Directory Id="INSTALLLOCATION" Name="Dolphin Transfer Service Server" ComponentGuidGenerationSeed="AF89976D-CD66-4b94-911B-1D27F969BC14">
    <Component Id="ServiceComponent" Guid="F55415F7-803C-4a83-A677-C0F882699374">
        <ServiceInstall Id="DolphinTransferService" Type="ownProcess"...

и целевой каталог для моих собранных файлов - это каталог INSTALLLOCATION.

Глядя на MSI с помощью Orca, я вижу мой ServiceComponent и все сгенерированные компоненты для каждого собранного файла. В таблице файлов нет файлов, связанных с этим компонентом (так как они имеют компонент, сгенерированный для каждого файла...). При просмотре таблицы ServiceInstall компонент, который он пытается установить, - это ServiceComponent.

Поэтому я думаю, что мне нужно каким-то образом получить элемент ServiceInstall внутри компонента, сгенерированного для exe службы, чтобы он устанавливал этот компонент как службу, а не пустой компонент "ServiceComponent"? Но так как этот компонент генерируется во время сборки под воздействием тепла, мне не удалось добиться дальнейшего прогресса...

1 ответ

Вывод тепла - WXS-авторинг с одним файлом на компонент. Это поведение по умолчанию и не может быть изменено с помощью стандартных тепловых выключателей. Это было сделано для естественного следования правилам компонентов.

Если компонент содержит один файл, этот файл автоматически становится KeyPath. Следовательно, если вы не преобразуете вывод тепла и придерживаетесь правила "один компонент - один файл", это не должно быть причиной ошибки, которую вы получаете.

Я бы предложил изучить подробный журнал и посмотреть, содержит ли он более подробное описание ошибки, с которой вы столкнулись.

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