2009-05-13 4 views
4

Ich habe eine Eigenschaft, um Verknüpfungen zu installieren, die über Befehlszeilenargumente übergeben werden müssen. Die Bedingungen scheinen zu funktionieren, wenn ich die Eigenschaften innerhalb der wxs-Datei festlege, aber sie scheinen ignoriert zu werden, wenn sie über die Befehlszeile gesetzt werden. Aus dem Protokoll sehe ich, dass sie eingestellt werden:Von der Befehlszeile übergebene WiX-Bedingungseigenschaften funktionieren nicht?

MSI (s) (24:C8) [11:01:32:234]: PROPERTY CHANGE: Modifying INSTALLSTARTUPSHORTCUT property. Its current value is '0'. Its new value: '1'. 
MSI (s) (24:C8) [11:01:32:234]: PROPERTY CHANGE: Modifying INSTALLSTARTMENUSHORTCUT property. Its current value is '0'. Its new value: '1'. 
MSI (s) (24:C8) [11:01:32:234]: PROPERTY CHANGE: Modifying INSTALLDESKTOPSHORTCUT property. Its current value is '0'. Its new value: '1'. 

Allerdings werden sie die Verknüpfungen nicht installiert werden.

Es scheint auch so, als müssten sie in einer eigenen Komponente sein, um Bedingungen auf ihnen setzen zu können, sie können nicht mehr als Abkürzungen angekündigt werden. Wie würden Sie die angekündigten Shortcuts bedingt installieren?

Aktuelle Kurzcode:

<Property Id="INSTALLSTARTMENUSHORTCUT" Value="0"/> 
... 
<Component Id="StartMenuShortcut" Guid="MY-GUID"> 
    <Condition>INSTALLSTARTMENUSHORTCUT</Condition> 
    <Shortcut Id="StartMenuServerShortcut" 
    Directory="ProgramMenuDir" 
    Name="Application Name" WorkingDirectory="INSTALLDIR" Advertise="no" 
    Target="[!FileEXE]" 
    Icon="Icon.ico" /> 
</Component> 

Und für andere Verknüpfungen wiederholt

Edit:

Der Versuch, was Sacha vorgeschlagen und das Hinzufügen der folgenden:

<Property Id="INSTALLSTARTUPSHORTCUT" Value="0" Secure="yes"/> 
<Property Id="INSTALLDESKTOPSHORTCUT" Value="0" Secure="yes"/> 
<Property Id="INSTALLSTARTMENUSHORTCUT" Value="0" Secure="yes"/> 

Jetzt alles installiert die Verknüpfungen, obwohl sie auf 0 sowohl in der XML und o gesetzt sind n der Befehlszeile. Die Befehlszeile, die ich übergebe ist:

msiexec /i MySetup.msi INSTALLSTARTUPSHORTCUT=0 INSTALLDESKTOPSHORTCUT=0 INSTALLSTARTMENUSHORTCUT=0 /l*v inst.log /qb 

versucht, die Werte in Anführungszeichen setzen und immer noch nicht gehen. Nicht hier gezeigt, aber ich war erfolgreich bei der Manipulation der ALLUSERS-Eigenschaft, um Benutzer-oder Maschinen-Registrierungen zu tun, indem Sie ALLUSERS = "" oder ALLUSERS = "2" So sollte die Weitergabe von Eigenschaften möglich sein, aber ich bin mir nicht sicher was Ich mache falsch.

Antwort

10

Zwei Dinge, da es zwei Fragen hier:

  1. Advertised Shortcuts in der gleichen Komponente sein muss, dass die Datei, die sie an dem Punkt installiert. Dies ist erforderlich, da der Windows Installer auf den KeyPath der Komponente einen angekündigten Shorcut verweist. Sie können also keine angekündigten Shorcuts verwenden, wenn diese optional installiert werden sollen.

Ich habe eine blog post about how to create a shorcut and pass validation.

  1. Die von Ihnen verwendeten Eigenschaften müssen als sicher markiert werden, um vom Installations-UI-Prozess an die Serverseite übergeben zu werden.Um das zu tun gerade tun

    < Property Id = "INSTALLSTARTMENUSHORTCUT" Secure = "yes" />

Beachten Sie, dass ich nicht ein Value-Attribut hinzufügen. Wenn Sie einen Wert angeben, auch wenn es 0 ist, wird Ihr INSTALLSTARTMENUSHORCUT auf TRUE ausgewertet. Eine leere/nicht definierte Eigenschaft ist FALSE, jeder andere Wert ist TRUE.

+0

Danke Rob. Es scheint inkonsistent, dass, wenn Sie 0 direkt in die Bedingung-Eigenschaft setzen, es zu false auswertet, aber in einer Eigenschaft wird es als wahr ausgewertet. – Davy8

+0

Ich mache die Regeln nicht, ich lebe nur nach ihnen.

+0

Und wenn Sie standardmäßig auf "ja" setzen möchten, verwenden Sie die hier beschriebenen Bedingungen https://www.firegiant.com/wix/tutorial/com-expression-syntax-miscellanea/expression-syntax/ anstatt nur zu bewerten, ob eine Eigenschaft vorhanden ist überhaupt gesetzt – Martin

0

Wenn IIRC Werbung hat

Sie haben dieses Beispiel aus MindCapers here, gesehen auf Ja gesetzt wetten, hatte ich Probleme mit den shorcuts, bis ich den Registrierungseintrag erstellt.

+0

Ich kann Advertised = "yes" nicht setzen, wenn es nicht in der gleichen Komponente wie die Datei ist, zu der es verlinkt. Und wenn es in der gleichen Komponente ist, kann ich nur die Verknüpfung und nicht die gesamte Komponente eine Bedingung hinzufügen – Davy8

2

Haben Sie versucht, die Eigenschaften als sicher zu markieren?

<Property Id="INSTALLSTARTMENUSHORTCUT" Value="0" Secure="Yes" /> 

bei der Dokumentation der Suche nach den Shortcut Table Ich glaube nicht, Sie bedingt beworbenen Verknüpfungen bekommen. Wir umgehen dies, indem wir eine angekündigte Startmenü-Verknüpfung und eine normale Desktop-Verknüpfung installieren.

+0

Nur versucht und schien es nicht zu tun. Seltsamerweise, wenn ich Secure = "Ja" hinzugefügt alle Verknüpfungen installiert, obwohl sie auf Value = "0" in der WiX-Datei gesetzt sind – Davy8