Настройка ключевого пути при автоматическом сборе проекта
Я использую справочную функцию проекта 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. Следовательно, если вы не преобразуете вывод тепла и придерживаетесь правила "один компонент - один файл", это не должно быть причиной ошибки, которую вы получаете.
Я бы предложил изучить подробный журнал и посмотреть, содержит ли он более подробное описание ошибки, с которой вы столкнулись.