Frage

Ich möchte einen Wert aus einer INI -Datei in einem Wix -Installateur lesen. Ich habe gerade versucht, Inifilesearch zu verwenden, aber dies sucht nach einer INI -Datei oder einem in einer INI -Datei angegebenen Pfad (die Dokumentation ist nicht klar), dies nicht der Fall ist Lesen Sie einen Wert Aus einer INI -Datei.

Benötige ich eine Customaction, um dies zu tun? Und wenn ja, was würden die Leute vorschlagen? Scheint sehr seltsam, wenn Wix das nicht hat!

Code, den ich benutze:

<Property Id="SP">
    <IniFileSearch Id="SearchSPVersion" Name="sp.ini" Section="ServicePack"
    Key="Version" Type="raw">
        <DirectorySearch Id="SPIniFilePath" Path="[CFGPATH]">
            <FileSearch Id="SPIniFile" Name="sp.ini"/>
        </DirectorySearch>
    </IniFileSearch>
</Property>

INI -Datei:

[ServicePack] 
Version=1 

Ich habe es mit und ohne das Verzeichnis und die Dateisuche versucht (unter Verwendung des vollständigen Pfades in 'Name'), und ich habe ausprobiert. "Raw", "Datei" und "Verzeichnis".

War es hilfreich?

Lösung

Versuchen Sie dies in einer benutzerdefinierten DTF -Aktion:INI -Dateileser in C#

Andere Tipps

Das Windows Installer -Dokumentation gibt an, dass die .ini -Datei im Standard -Microsoft Windows -Verzeichnis vorhanden sein muss.

Es ist etwas verwirrend, da Dateisearch und DirectorySearch gültige Wix -Kinder sind. Ich glaube jedoch, dass dies für die Suche nach einer Datei oder einem angegebenen Verzeichnis ist innerhalb die INI -Datei selbst. Sie werden feststellen, dass die drei Wertearten, nach denen Sie innerhalb einer INI -Datei suchen können, Verzeichnis, Datei und RAW sind.

Es ist eine Einschränkung des Windows -Installationsprogramms, nicht von Wix. Die Microsoft -Schnittstellen für das Lesen von Ini -Dateien (z. B. z. B. GetPrivateProfilestring) Schaut im Windows -Ordner, wenn kein Pfad angegeben ist. Ich denke, das Windows Installer -Team hat beschlossen, Dinge nicht zu vereinfachen und nur INI -Dateien im Windows -Ordner zu unterstützen, indem er keinen dynamischen Pfad zulässt.

Ich weiß, dass dies ein alter Thread ist, aber ich hatte gehofft, jemanden vor dem gleichen Schmerz zu retten, den ich durchgemacht habe ...

Das liest a Wert Aus einer INI -Datei, zumindest so weit wie meine Tests mit Wix3.5 und 3.6 Beta. dh

<Property Id="MY_PROPERTY">
        <IniFileSearch Id="myIniSearch" Name="myConfigFile.ini" Section="section1" Key="name" Type="raw" />
    </Property>

    <Condition Message="myconfigfile not def.">MY_PROPERTY</Condition>

Mit der entsprechenden INI -Datei in C: Windows myconfigfile.ini (Windows 7):

[section1]
name=testing

Ich habe jedoch viele Stunden verbrannt, um herauszufinden, warum dies nicht funktionierte, bevor ich merkte, dass die INI -Datei sein muss Ansi Und nicht UTF8! Eine ANSI codierte .ini -Datei an der richtigen Stelle, dh c: windows einige.ini wird funktionieren.

UTF8 -Dateien werden einfach nicht gelesen, es tritt kein Fehler auf, die Eigenschaftszuweisung tritt einfach nicht auf.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top