2009-12-18 23 views
17

Ich erstelle ein Installationsprogramm unter Verwendung von InnoSetup und schreibe einige benutzerdefinierte Handler in einen [Code] Abschnitt. In einem der Handler möchte ich in der Lage sein, den Wert AppName (oder möglicherweise den Wert anderer Parameter) im Abschnitt [Setup] definiert abrufen. Gibt es eine Möglichkeit für mich, dies zu tun? Ich habe mir zwar die documentation angesehen, aber ich habe nichts gefunden, was mir das erlauben würde. Unsere InnoSetup-Dateien werden tatsächlich durch unseren Build-Prozess erzeugt, der Fragmente zusammenfügt, die zwischen all unseren Programmen vorhanden sind und die programmspezifisch sind, so dass es unbequem wäre, Konstanten im Code für jedes Programm zu definieren. Gibt es einen bequemen Weg, dies zu tun?InnoSetup: Abrufen von AppName im [Code] -Abschnitt

Ich suche nach etwas wie

MyString := ExpandConstant('{AppName}'); 

Außer {AppName} ist nicht eine definierte Konstante. Gibt es eine Möglichkeit, die im Abschnitt [Setup] definierten Parameter abzufragen?

Antwort

13

Es ist eine Build-Zeitkonstante, kein Installationszeitwert. Sie können also das Add-On Inno Setup Preprocessor verwenden, um solche Konstanten zu definieren. (Sie können es einfach über die QuickStart pack installieren).

definieren die Konstante:

#define AppName "Excellent Foo App" 

die ständige Verwendung in [Setup]:

AppName={#AppName} 

Und in Pascal-Code, ich bin nicht ganz sicher, der Syntax, aber so etwas wie:

MyString := {#AppName} 

Update: realisierte ich eines von Meine Skripte verwendet {#emit SetupSetting("AppId")}, die einfacher ist. Brian's solution entdeckte auch diese Methode und ist besser.

+0

Hmm. Ich würde es vorziehen, nicht jeden AppName als ein Makro definieren zu müssen und dieses Makro dann zu verwenden, um den tatsächlichen AppName in jedem Programm zu definieren. Aber das ist ein Anfang. –

+0

Ich weiß was du meinst. Aber mir ist keine andere Möglichkeit bekannt, dies zu tun. –

19

Inspiriert von Craigs Antwort schaute ich mir die Inno-Setup-Präprozessor-Dokumentation an (in ISTool, soweit nicht online verfügbar) und stieß auf die SetupSetting-Funktion im Präprozessor.

Es kann als so verwendet werden:

MyString := '{#SetupSetting("AppName")}'; 

Und solange der [Setup] Abschnitt vor dem Ort angezeigt, in dem diese verwendet wird (ISPP scheint nur ein Durchgang zu sein), und enthält eine Definition für AppName, Dies liefert die gewünschten Ergebnisse, ohne dass für jede Einstellung, die wir extrahieren möchten, ein zusätzliches Makro definiert werden muss.

+0

Ich habe gerade über eines meiner Skripte geschaut und festgestellt, dass ich das benutzt habe (eigentlich hatte ich '{#emit SetupSetting (" AppId ")}' aber nahe genug) benutzt. Ich bin gekommen, um meine Antwort zu aktualisieren, aber ich sehe, du hast mich dazu geschlagen! –

+3

{# ist eine Abkürzung für {#emit – mlaan

Verwandte Themen