2011-02-10 4 views
5

Ho un sacco di file da raccogliere in un progetto di installazione per utente in wix.Personalizza l'elemento KeyPath quando si utilizza wix heat.exe per raccogliere più file

Ho utilizzato heat.exe per raccogliere il file, ma ogni file in un componente ha la propria proprietà keypath, mentre i miei file verranno copiati in "dati app" quindi deve utilizzare una chiave di registro in HKCU come KeyPath, quindi devo cambiare ogni elemento nel file XML.

Può essere eseguito da heat.exe? Ho migliaia di file da raccogliere, è terribile correggerlo manualmente.

+1

simile domanda qui: http://stackoverflow.com/questions/8034798/wix-installer-using-xslt-with-heat-exe-to- update-attributes –

risposta

1

Per quanto ne so, il calore non supporta questo out-of-the-box. Tuttavia, puoi applicare un modello XSL all'emissione di calore e modificare il file finale di wxs nel modo desiderato. Vedi -t: switch of heat.exe per maggiori dettagli.

+0

grazie Yan, potresti darmi maggiori informazioni? vuoi dire -t può risolvere il mio problema? potrebbe dirmi di più? non riesco a trovare la risposta nel suo documento ufficiale –

+0

Vedere il testo della guida per heat.exe. È possibile specificare -t: transform.xslt e in quella trasformazione apportare eventuali modifiche all'XML generato inizialmente da heat.exe. Ad esempio, nel tuo caso, puoi creare un modello che "corrisponde" agli elementi del componente e aggiunge la chiave del Registro di sistema a ciascuno di questi (se comprendo correttamente i tuoi requisiti). Ma dovresti capire che la responsabilità dell'XML di output è tua. E richiederà almeno una conoscenza di base del linguaggio delle trasformazioni XSLT ... –

4

Utilizzare questo xslt per personalizzare l'elemento KeyPath per nodi con nodi figlio.

<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" 
     xmlns:my="my:my"> 

    <xsl:output method="xml" indent="yes" /> 

    <xsl:strip-space elements="*"/> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match='wix:Wix/wix:Fragment/wix:ComponentGroup/wix:Component'> 
     <xsl:copy> 
      <xsl:apply-templates select="@*"/> 
      <xsl:attribute name="KeyPath"> 
      <xsl:text>no</xsl:text> 
      </xsl:attribute> 
      <xsl:apply-templates select="node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

derivato dalla risposta @KirillPolishchuk s' https://stackoverflow.com/a/8035049/483588

Problemi correlati