2017-03-28 4 views
0

Wie zu verwenden FileSearch Ergebnis als Bedingung in Component Abschnitt. Ich möchte so etwas bekommen:Wix Eigenschaft Bewertung

<Property Id=\"CONFIG_XML_EXISTS\"> 
     <DirectorySearch Id="CheckForConfigXml" Path="[INSTALLDIR]\">' 
      <FileSearch Id="ConfigXmlSearch" Name="config.xml" /> 
     </DirectorySearch> 
    </Property> 
    ... 
    <Component Id="c_DefaultConfig.xml" Guid="{1AAB0AFD-B763-4A55-8585-B0AD4D8CE23C}"> 
     <File Id="f_default_config.xml" 
       Name="default-config.xml" 
       Source="$(var.SourceRoot)\config.xml"/> 
     <Condition>CONFIG_XML_EXISTS</Condition> 
    </Component> 

Ich weiß nicht, warum, aber Eigenschaft wix will nicht CONFIG_XML_EXISTS bewerten.

Antwort

0

Da diese Suche sehr früh in der Installation erfolgt, ist der wahrscheinlichste Grund, dass INSTALLDIR keinen Wert hat. Sie haben nicht gesagt, ob Sie eine Neuinstallation oder ein Upgrade durchführen, daher ist nicht klar, woher Sie meinen, dass es seinen Wert erhalten könnte.

Ich würde auch darauf hinweisen, dass der Zweck dieser Quellcode offenbar die Installation von einer Datei zu verhindern, ist, ob es bereits eine gibt, so:

  1. Wenn INSTALLDIR die Anwendung erweist Ordner (in der Regel Programmdateien), in denen Ihre Dateien installiert sind, können Benutzer normalerweise diesen Speicherort ändern, so ist es nicht klar, dass die Datei dort sein wird, wo Sie es erwarten.

  2. Die Dateiüberschreibungsregeln verhindern, dass eingehende Dateien geänderte Datendateien überschreiben (Änderungsdatum> Erstellungsdatum). Wenn diese Konfigurationsdatei geändert wurde, wird sie nicht überschrieben und Sie müssen die Überprüfung nicht durchführen.

In Ihrem Kommentar sagen Sie: „Mein Installateur nur Datei config.xml erstellen muss, wenn es in Ziel (Installation) Verzeichnis keine solche Datei ist. Wenn eine solche Datei vorhanden ist, meine Installationsdatei mit dem Namen template.xml erstellen müssen ". Ich denke, dass dies am einfachsten in der Anwendung ist, nachdem die Installation abgeschlossen wurde, oder möglicherweise in einer benutzerdefinierten Aktion, nachdem alle Dateien installiert wurden. Es scheint keinen guten Weg zu geben, dies vor der Installation zu tun, da INSTALLDIR nicht vorhersehbar ist. Ich habe diese Art von Problem gelöst, indem ich die XML-Dateien beispielsweise in Anwendungsdaten des Anwenders installiere, und nachdem die Dateien installiert sind, kann die Anwendung oder eine benutzerdefinierte Aktion sehen, welche Dateien vorhanden sind (oder nicht) und sie von Benutzern abrufen Anwendungsdaten.

+0

1. Wie kann ich die Auswertungsstufe angeben (direkt vor dem Kopieren der Dateien)? 2. Der Code oben ist ein Beispiel, mein aktuelles Projekt Ich muss wirklich auf exstance überprüfen – Edward

+0

In der Regel installieren Sie nie die Existenz jeder einzelnen Datei überprüfen zu installieren, um zu sehen, ob sie existieren - sie nutzen die Standardregeln zum Ersetzen von Dateien, so dass mehr Details zu Ihrer Ausnahme helfen würden. Auch hier gibt es keinen Hinweis darauf, ob Sie eine Neuinstallation oder ein Upgrade durchführen oder ob INSTALLDIR vom Benutzer geändert werden könnte, wodurch Ihr Test sinnlos wird. – PhilDW

+0

Ich weiß, dass im Allgemeinen Installer nicht das tut, was ich versuche, aber trotzdem .... Hier ist die Idee: Mein Installer muss die Datei 'config.xml' nur erstellen, wenn es keine solche Datei im Ziel gibt (install) Verzeichnis. Wenn eine solche Datei existiert, muss mein Installer eine Datei mit dem Namen 'template.xml' erstellen. – Edward