Настройка ключевого пути при автоматическом сборе проекта - PullRequest
0 голосов
/ 06 октября 2010

Я использую эталонную функцию проекта 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 Ответ

0 голосов
/ 06 октября 2010

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

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

...