2016-05-20 9 views
0

Ich habe ein benutzerdefiniertes UI-Element in einer separaten Datei namens UserRegDialog.wxs definiert, um die Dinge etwas modularer zu gestalten.Ein UI-Element aus einer anderen .wxs-Datei referenzieren

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Fragment> 
    <UI Id="MyUserRegDialogUI" > 

     <Property Id="Proceed">proceedbtn</Property> 
     <Binary Id="proceedbtn" SourceFile="images/proceedbtn.bmp"/> 
     <Binary Id="headerPic" SourceFile="images/header.bmp"/> 
... 
    </UI> </Fragment> 

Dann in meinem Haupt Product.wxs, ich bin versucht, das UI-Element zu verweisen I definiert:

<Product Id="*" Name="CRxGUI" Language="1033" Version="1.0.0.0" Manufacturer="Derp LLC" UpgradeCode="bfcd8325-0025-463a-9589-c4c4713ce11d"> 
     <Package InstallerVersion="200" Compressed="no" InstallScope="perMachine" Description="My GUI Installer" /> 

     <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 
     <MediaTemplate /> 

    <UI> 
     <UIRef Id="WixUI_InstallDir" /> 
     <UIRef Id="MyUserRegDialogUI" /> 
... 

Aber, meldet der Wix-Builder einen Fehler, dass es nicht gefunden werden kann . Mit .wxi-Dateien habe ich sie einfach in eine <?include myfile.wxi ?> gelegt, aber das scheint nicht mit anderen .wxs-Dateien zu funktionieren. Was mache ich falsch? Wie kann ich meinen benutzerdefinierten Dialog von der anderen Datei referenzieren?

Ich habe versucht, die Helfer. WXS-Datei umzubenennen, um das UI-ID-Attribut zu entsprechen, aber das hat nicht geholfen.

Antwort

0

Sind die beiden Dateien im selben Ordner? Unter Umständen müssen Sie den relativen Pfad von UserRegDialog.wxs im <?include?>

Ich denke, füge diese Datei als Link (Visual Studio auf Vorhandenes Element hinzufügen> wählen Sie Datei> In Schaltfläche Dropdown-Pfeil> „als Verknüpfung“) liefern könnten Holen Sie den Compiler, um die Datei ordnungsgemäß zu verknüpfen.

Eine weitere Option, die Sie in Betracht ziehen könnten, insbesondere wenn Sie mehrere separate wxs-Dateien verwenden möchten, besteht darin, sie alle in ein wixlib-Projekt einzufügen und auf dieses Projekt in Ihrer Hauptinstallation zu verweisen. Ich denke du kannst das wixlib Projekt auch in eine Erweiterung einbauen und eine DLL wie die wixuiextension und wixutilextension einbauen.

Ich würde meine Vorschläge testen, aber ich habe keine Umgebung, die ich dieses Wochenende schnell überprüfen kann.

+0

Meine Helfer WXS-Datei befindet sich im selben Verzeichnis. Ich glaube nicht, dass das Importieren funktioniert:

0

Sobald Sie alle Dateien kompiliert haben, müssen Sie sie nur verknüpfen. Ich nehme an, die Datei wurde nicht kompiliert, dann haben Sie einen ungelösten Symbol Linker Fehler.

Visual Studio verwenden:

Überprüfen Sie, ob Ihre Datei Compile gesetzt:

In Ihrem Projekt, direkt in Ihrem UserRegDialog.wxs klicken, wählen Eigenschaften, dann werden Sie innen sehen Dateieigenschaften ein Abschnitt namens Erweitert der Buildaktion muss auf festgelegt werden Kompilieren.

Ohne Visual Studio:

Überprüfen Sie, ob Ihr Build kompiliert und Ihre UserRegDialog.wxs richtig zu verknüpfen.

Beispiel eines Projekts richtig verknüpfen, kompilierte jeder Datei verknüpft ist:

candle MySetup.wxs UserRegDialog.wxs 
    light -out setup.msi MySetup.wixobj UserRegDialog.wixobj 

Referenz:

https://www.firegiant.com/wix/tutorial/upgrades-and-modularization/fragments/

0

Benennen Sie Ihre Datei UserRegDialog.wxi, dann sollten Sie in der Lage sein, schließen es unter Verwendung <?include UserRegDialog.wxi?>.Die <?include ?> Anweisung sollte unter dem </Product> Tag sein.