2017-05-18 3 views
1

Ich baue ein WiX-Installationsprogramm für eine Anwendung mit dem Befehl burn und dem WixStandardBootstrapperApplication-Typ. Dieses Installationsprogramm installiert .NET 4.6.2, SQL Server, das Datenbankschema und die Anwendung. Ich bin mir ziemlich sicher, dass alles, aber die Anwendung funktioniert, aber ich kann nicht testen, da ich folgende Fehlermeldung mich immer, wenn Sie die Anwendung MSI Aufbau:WiX-Installer 3.11: Element enthält ein unbehandeltes Erweiterungselement mit leerem Namespace

The File element contains an unhandled extension element 'Shortcut'. 
Please ensure that the extension for elements in the '' namespace has been provided. 

Nun, alles, was ich gelesen habe, sagt, dass ich nur müssen -ext < DLL für den Namespace > zum Build-Befehl hinzufügen, und alles wird funktionieren. Leider, ohne Namespace aufgelistet, kann ich das nicht tun.

ich das MSI in seinem eigenen Projekt erzeugen, deren Einzelheiten hier sind (hygienisiert):

ich die Liste der Komponenten durch heat.exe in einem Pre-Build-Ereignis generiert wird. Hier ist das Kommando:

"%WIX%bin\heat" dir "APPLICATIONDIR\bin\Release" -gg -cg Application32 -scom -sreg -sfrag -srd -dr INSTALLDIR -var "var.SourceDir" -t ../../Application.xslt -out "..\..\Fragments\Application.wxs" 

Product.wxs:

<xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="*" 
      Name="Installer32" 
      Language="1033" 
      Version="1.0.0.0" 
      Manufacturer="Company Name" 
      UpgradeCode="YOURGUID-12D0-4836-99F0-CB0C14264423"> 
     <Package InstallerVersion="200" 
      Compressed="yes" 
      InstallScope="perMachine" /> 
     <Media Id="1" 
      Cabinet="Application.cab" /> 
    <Property Id="DISABLEADVTSHORTCUTS" Value="1" /> 
     <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 
     <Feature Id="ProductFeature" 
      Title="Installer32" 
      Level="1"> 
      <ComponentGroupRef Id="Application32" /> 
      <ComponentRef Id="ApplicationStartMenuShortcut"/> 
     </Feature> 
    </Product> 
    <Fragment> 
    <!-- ProgramFiles directory--> 
     <Directory Id="TARGETDIR" 
       Name="SourceDir"> 
      <Directory Id="ProgramFilesFolder"> 
     <Directory Id="CompanyFolder" 
        Name="Company"> 
        <Directory Id="INSTALLDIR" 
         Name="Application"> 
      </Directory> 
       </Directory> 
     </Directory> 
     <Directory Id="ProgramMenuFolder"> 
     <Directory Id="ApplicationProgramsFolder" Name="Product Name" /> 
     </Directory> 
     </Directory> 
    </Fragment> 
</Wix> 

Application.xslt:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" 
       xmlns:wix="http://schemas.microsoft.com/wix/2006/wi" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       exclude-result-prefixes="wix"> 
    <xsl:output method="xml" indent="yes" /> 
    <!-- This modifies the auto-generated Component for the executable to add shortcuts to start menu and desktop --> 
    <xsl:template match='wix:Wix/wix:Fragment/wix:DirectoryRef/wix:Component/wix:File[@Id and (@Id = "filAE9755507C00040964294096392BF6A2")]'> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
     <Shortcut Id="ApplicationDesktopShortcut" 
       Directory="ApplicationProgramsFolder" 
       Name="Application" 
       Advertise="yes" /> 
    </xsl:copy> 
    </xsl:template> 
    <!-- Identity template: copies everything without change --> 
    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()" /> 
    </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

EDIT: Hinzugefügt Ausgabe von HEAT:

<?xml version="1.0" encoding="utf-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Fragment> 
     <DirectoryRef Id="INSTALLDIR"> 
      [ SNIPPED MANY ] 
      <Component Id="cmpE60EA55C613C91D5119575B9B63102FB" Guid="{7A9A6D6D-960F-4ADB-8DC8-7A09FED71D48}"> 
       <File Id="filAE9755507C00040964294096392BF6A2" KeyPath="yes" Source="$(var.SourceDir)\Application.exe"><Shortcut Id="ApplicationDesktopShortcut" Directory="ApplicationProgramsFolder" Name="Application" Advertise="yes" xmlns="" /></File> 
      </Component> 
      <Component Id="cmpA0604D18A00382A0CB4E004C7C2286DA" Guid="{538403B0-09ED-46C7-AD94-403C05ADAB56}"> 
       <File Id="fil2F48795734FE3514952453321B4758C3" KeyPath="yes" Source="$(var.SourceDir)\Application.exe.config" /> 
      </Component> 
      [ SNIPPED MANY ] 
      <Directory Id="dir43A0033346A51A6633F88C79EA143D36" Name="da"> 
       <Component Id="cmp46F002450D6F653B36DCD369206685B4" Guid="{64EC22D1-B0ED-49E1-979E-7B8F54C558E3}"> 
        <File Id="fil85957091B9F72CCAF0CF1D59748A6046" KeyPath="yes" Source="$(var.SourceDir)\da\Product.Utilities.resources.dll" /> 
       </Component> 
      </Directory> 
      [ SNIPPED MANY ] 
     </DirectoryRef> 
    </Fragment> 
    <Fragment> 
     <ComponentGroup Id="Application32"> 
      [ SNIPPED MANY ] 
      <ComponentRef Id="cmpE60EA55C613C91D5119575B9B63102FB" /> 
      <ComponentRef Id="cmpA0604D18A00382A0CB4E004C7C2286DA" /> 
      [ SNIPPED MANY ] 
      <ComponentRef Id="cmp46F002450D6F653B36DCD369206685B4" /> 
      [ SNIPPED MANY ] 
     </ComponentGroup> 
    </Fragment> 
</Wix> 

Die einzigen anderen SO Frage, die einen leeren Namespace hat, ist dies o ne: Migrating from WiX 3.10 to WiX 4.0: unhandled extension element. Die Lösung gilt nicht für diese Frage, da ich das Registry-Element nicht verwende, noch wechsle ich zu WiX 4. Möglicherweise verwende ich ein anderes Element, das veraltet ist. Ich glaube nicht, dass ich es bin.

Alle Hinweise auf den Weg nach vorne wären willkommen. Vielen Dank.

+0

Ich lief wixcop auf meine wxs aussehen sollte. Es beschwerte sich nur über meine Codeformatierung. Keine veralteten Elemente. –

+1

Versuchen Sie, 'xmlns =" ​​http://schemas.microsoft.com/wix/2006/wi "' zu Ihrem 'xsl: stylesheet'-Element hinzuzufügen, um das' Shortcut'-Element in den richtigen Namespace einzufügen. –

+0

Könntest du auch in der wxs von der Heizleistung vorbeikommen? –

Antwort

0

Versuchen Sie xmlns="http://schemas.microsoft.com/wix/2006/wi" zu Ihrem xsl:stylesheet Element, um das Shortcut Element in den richtigen Namespace zu setzen.

es so ...

<xsl:stylesheet version="2.0" 
    xmlns:wix="http://schemas.microsoft.com/wix/2006/wi" 
    xmlns="http://schemas.microsoft.com/wix/2006/wi" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    exclude-result-prefixes="wix"> 
Verwandte Themen