WiX 3.5 Установить сервис от Heat, нужно от Custom Action? - PullRequest
6 голосов
/ 11 августа 2011

У меня есть проект VS2010 WiX с основным файлом .wxs и пустым файлом .wxs.Пустой .wxs перезаписывается в событии prebuild проекта, используя heat.exe для сбора всего из консоли exe.В exe есть хуки InstallUtil, и во времена проекта установки VS он был установлен как Сервис.

Я пытался использовать биты <ServiceInstall> в WiX, но когда я указал исполняемый файл и другие элементы дляУстановив Службу, Лайт пожаловался на конфликт между .exe в главном .wxs и .exe в тепловыделенных .wxs.

Я думаю, что Custom Action - не лучший способ сделать сервисустановки, поэтому я пытаюсь преобразовать XSL, чтобы получить файл, который мне не нужен (это один файл из 100).

У моего XSL должна быть проблема, потому что он не соответствует / фильтруется.Вот оно:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl"
    xmlns:Wix="http://schemas.microsoft.com/wix/2006/wi">

  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()" />
    </xsl:copy>
  </xsl:template>

<xsl:template match="
        Component[File/@Source='$(var.bindir)\servicehost.exe']"/
</xsl:stylesheet>

Части .wxs, которые мне нужно извлечь, выглядят так:

    ....
     <Component Id="cmpD64BE1790BFAF0F05DA37558F5D72572" Guid="{6C70DDC8-349B-4B66-A415-DE08E302C2A8}">
                    <File Id="fil24DFDFCA765C9A8BBB8854CE66AED0E8" KeyPath="yes" Source="$(var.bindir)\servicehost.exe" />
                </Component>
    ....
<ComponentRef Id="cmpD64BE1790BFAF0F05DA37558F5D72572" />
    ....

Каков наилучший способ сделать эту работу?

Спасибо.

Ответы [ 2 ]

8 голосов
/ 23 марта 2012

Элементы Wix XML находятся в пространстве имен, поэтому вам необходимо указать пространство имен в значении match.

Я решил ту же проблему, используя XSL для добавления в ServiceInstall и * 1005.* элементы фрагмента, сгенерированные heat:

<!-- Add the service install/control entries to mybinary.exe -->
<xsl:template match="wix:Component[contains(wix:File/@Source,'mybinary.exe')]">
    <xsl:copy>
        <xsl:apply-templates select="node() | @*" />
        <wix:ServiceInstall Id="MyServiceInstall" DisplayName="[SERVICE_NAME]" Description="[SERVICE_DESC]" Name="MyService" Arguments="" ErrorControl="normal" Start="auto" Type="ownProcess" Vital="yes" Account="LocalSystem" />
        <wix:ServiceControl Id="MyServiceControl" Name="MyService" Start="install" Stop="uninstall" Remove="uninstall" />
    </xsl:copy>
</xsl:template>
3 голосов
/ 11 августа 2011

Создайте промежуточный каталог для файлов, которые вы хотите собрать с помощью Heat.Храните службу .exe отдельно, чтобы можно было вручную создать ServiceInstall.

...