2011-08-11 34 views
4

我有一個主要的.wxs文件和一個空的.wxs文件的VS2010 WiX項目。空的.wxs在項目的預建事件中被覆蓋,使用heat.exe從控制檯exe中收集所有內容。該exe文件具有InstallUtil掛鉤,並且在VS安裝項目的日子裏,該exe文件作爲服務安裝。WiX 3.5從熱源安裝服務,需要自定義操作?

我試圖在WiX中使用<ServiceInstall>位,但是當我指定可執行文件和其他元素來安裝服務時,light會抱怨主.wxs中的.exe和熱中的.exe之間發生衝突生成.wxs。

我想自定義操作是不是做服務的安裝最好的辦法,所以我試圖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" /> 
    .... 

是什麼,使這項工作的最佳方式是什麼?

謝謝。

+0

類似的問題:http://stackoverflow.com/questions/7906578/removing

我使用XSL在ServiceInstallServiceControl元素添加到由heat產生的片段解決同樣的問題-unit-test-dll-files-when-wix –

回答

3

創建要與收穫熱火文件臨時目錄。保持服務.exe分離,以便您可以手動編寫ServiceInstall。

+0

Heat正在查看Service output bin \ debug目錄。我希望有一種方法可以從Heat中排除文件模式。嗯。也許有一種方法可以使用XSL去除exe文件,這樣我就可以將它保存在我的主要wxs中? – Snowy

+1

這就是爲什麼我建議創建一個暫存目錄,因此您可以控制Heat正在收穫的內容,而無需轉到XSL路線。 –

+0

@達尼-卡博提供的[類似的回答(http://stackoverflow.com/a/20197647/1811525) - 避免在同一時間的複合變換和分級目錄。 – CodeFox

6

的維克斯XML元素都在一個命名空間,所以你需要指定在match值的命名空間。

<!-- 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> 
這裏
+1

完全匹配的二進制文件(如果你有一個同名的app.config),試試這個比賽線路: 的 Mo0gles