Я написал новый установщик, используя 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?
Итак, другие ответы, найденные в stackoverflow, действительно ложные? – Ultratrunks
Я их не читал. :) –