2016-12-08 9 views
1

Я написал новый установщик, используя WiX Toolset. Похоже, что наилучшей практикой является использование приложения heat.exe для запуска ваших встроенных файлов приложений и автоматической генерации ссылок для включения в ваш установщик. Это здорово и все, но я нахожу, что, используя эту технику, вы в значительной степени блокируете эти файлы полезными в НИЧЕГО, кроме акта копирования их в каталог установки. Это потому, что я не могу «ссылаться» на эти файлы на другие вещи. Например. Один из файлов, которые я хотел бы установить в качестве службы, но механизм ServiceInstall, похоже, не позволяет вам использовать что-то, ссылающееся на урожай. Кроме того, один из моих файлов - это XML-файл, который я бы хотел изменить на основе ввода от пользователя во время установки. Опять же, я не могу ссылаться на этот файл из урожая для использования в механизме XmlConfig.Как вы ссылаетесь на файл из источника heat.exe, собранного из других источников в установщике WiX?

Я видел это post, но выбранный ответ на самом деле не является примером. И для загрузки компилятор WiX не позволяет вам помещать символы «#» в поле идентификатора, потому что это «не юридический идентификатор», как утверждается в сообщении ответа. И если вы используете простые идентификаторы из урожая, он жалуется, что они уже существуют.

Вот фрагмент моего урожая .wxs-файла.

<!-- Xml file I'd like to modify during install --> 
<Component Id="cmp78CF3591818BB6F883096F2C98654BA9" Guid="*"> 
    <File Id="fil1532F0BC6EDCE81B25489D872A72339A" KeyPath="yes" Source="$(var.MyApplication.TargetDir)\log.config" /> 
</Component> 

<!-- ... --> 

<!-- Application I'd like to install as a service --> 
<Component Id="cmp84F0EA671F93094E33AE84FA2A03BA2E" Guid="*"> 
    <File Id="filD4A27A27D20D3D734B279B4F21754836" KeyPath="yes" Source="$(var.MyApplication.TargetDir)\MyService.exe" /> 
</Component> 

Для обслуживания установки, я чувствую, что интуитивно было бы что-то вроде этого:

<Component Id="cmp84F0EA671F93094E33AE84FA2A03BA2E"> 
    <File Id="filD4A27A27D20D3D734B279B4F21754836" /> 
    <ServiceInstall 
     Id="MyServiceID" 
     Name="MyService" 
     Type="ownProcess" 
     Start="auto" 
     ErrorControl="normal" 
     Interactive="no"> 
    </ServiceInstall> 
    <ServiceControl Name="MyService" Id="MyServiceControl" Start="install" Stop="both" Remove="uninstall" Wait="yes"/> 
</Component> 

Но, конечно, это не работает, потому что он утверждает, что идентификаторы дублируются. Я думаю, что они есть, но как я могу сказать: «Ты знаешь этот файл« Х »внутри урожая ... а я хотел бы установить это как сервис». Мне удалось установить установку на работу, но мне пришлось отфильтровать файл MyService.exe из урожая и вручную добавить его. Теперь, если это так каждый раз, когда вы действительно хотите что-то сделать с конкретным файлом, я думаю, что могу просто забыть, используя технику stupid heat.exe и вручную вводить каждый файл. Итак, что же такое синтаксис, который вы будете использовать для ссылки на файлы изнутри Heat.exe?

ответ

3

Простой ответ: не используйте Heat.exe для создания авторинга для файлов, требующих специальной обработки, например сервисов. Исключите эти файлы из урожая (при необходимости, используя промежуточную директорию).

+0

Итак, другие ответы, найденные в stackoverflow, действительно ложные? – Ultratrunks

+0

Я их не читал. :) –

0

Тепло генерирует определения компонентов для вас. Поместите элемент ServiceInstall внутри компонента в урожай .wxs. Ваш новый фрагмент будет выглядеть так:

<!-- Application I'd like to install as a service --> 
<Component Id="cmp84F0EA671F93094E33AE84FA2A03BA2E" Guid="*"> 
    <File Id="filD4A27A27D20D3D734B279B4F21754836" KeyPath="yes" Source="$(var.MyApplication.TargetDir)\MyService.exe" /> 
    <ServiceInstall 
     Id="MyServiceID" 
     Name="MyService" 
     Type="ownProcess" 
     Start="auto" 
     ErrorControl="normal" 
     Interactive="no"> 
    </ServiceInstall> 
    <ServiceControl Name="MyService" Id="MyServiceControl" Start="install" Stop="both" Remove="uninstall" Wait="yes"/> 
</Component> 
+0

Я вижу. Проблема в том, что мы запускаем файл heat.exe как часть сборки. Таким образом, при добавлении новых двоичных файлов нам не нужно менять установщик. Это, конечно, сдуло бы любые пользовательские изменения в урожай. Wxs :( – Ultratrunks

+0

Ах, тогда либо используйте ответ Боба, либо этот ответ, которым пользователи xslt добавляют конфигурацию сервиса к урожаю: http://stackoverflow.com/a/9834278/581187, также ответы на этот вопрос: http://stackoverflow.com/q/20193681/581187 – tjleigh