
Textdatei erstellen / ändern
Posted 24 September 2009 - 10:21
auf welche Weise kann ich am einfachsten eine Textdatei erstellen oder ändern?
Folgende Einträge sollen mit Hilfe von Eigenschaften in die Datei geschrieben werden:
ServerRoot "[INSTALLDIR]\apache"
Listen [PORT]
Include conf/default.conf
Gruß
JM
Gruß
Jürgen Markert
(Anwender von InstallShield 2016 - Professional Edition)
Posted 24 September 2009 - 13:05
Posted 24 September 2009 - 13:29
Leider kenne ich mich noch nicht mit InstallScript aus. Hast Du zufällig ein Beispiel, an dem ich sehen kann, wie meine Funktion in etwa aussehen muss? Wie kann ich z. B. die Eigenschaften verwenden?
Gruß
Jürgen Markert
(Anwender von InstallShield 2016 - Professional Edition)
Posted 24 September 2009 - 15:18
CODE |
function MyFunction(hMSI) STRING szInstallDir; STRING szPort; STRING szFile; STRING svText; begin szInstallDir = MsiGetCustomActionDataAttribute( hMSI, "/INSTALLDIR=" ); szPort = MsiGetCustomActionDataAttribute( hMSI, "/PORT=" ); szFile = szInstallDir ^ "myconfig.txt"; Sprintf(svText, "ServerRoot \"%sapache\"", szInstallDir); FileInsertLine (szFile, svText, 0, AFTER); return ERROR_SUCCESS; end; |
Quellcode von MsiGetCustomActionDataAttribute gibt es hier
Dann erstellst du eine InstallScript Custom Action (Deferred CA in System Context) und setzt noch CustomActionData für diese CA. Dafür einfach eine Property mit dem Namen der CA setzen mit folgenden Inhalt:
/INSTALLDIR=[INSTALLDIR] /PORT=[PORT]
Edited by Holger_G, 25 September 2009 - 06:59.
Posted 25 September 2009 - 07:33
Stefan Krüger
InstallSite.org twitter facebook
Posted 25 September 2009 - 08:41

Ein kleines Problem habe ich aber noch:
wenn ich nun versuche, ein Release zu erstellen, weigert sich IS mit der Fehlermeldung "ISDEV : error -6138: Fehler beim Kompilieren von Setup.rul. Setup.rul muss im Projekt enthalten sein. Vergewissern Sie sich, dass diese Datei im Projekt enthalten ist."
Wenn ich versuche, Setup.rul unter InstallScript anzulegen, soll diese Datei schon vorhanden sein.
Der Fehler tritt aber erst dann auf, wenn ich eine benutzerdefinierte Aktion angelegt habe. Lösche ich diese wieder, ist der Fehler ebenfalls weg.
Was ist zu tun?
Gruß
Jürgen Markert
(Anwender von InstallShield 2016 - Professional Edition)
Posted 25 September 2009 - 08:44
wir verwenden IS 2009, trotzdem Danke für den Hinweis.

Gruß
JM
Gruß
Jürgen Markert
(Anwender von InstallShield 2016 - Professional Edition)
Posted 25 September 2009 - 09:11

Gruß
Jürgen Markert
(Anwender von InstallShield 2016 - Professional Edition)
Posted 25 September 2009 - 09:14
QUOTE (Majue @ 2009-09-25 08:41) |
Vielen Dank, das hilft mir auf jeden Fall weiter! ![]() Ein kleines Problem habe ich aber noch: wenn ich nun versuche, ein Release zu erstellen, weigert sich IS mit der Fehlermeldung "ISDEV : error -6138: Fehler beim Kompilieren von Setup.rul. Setup.rul muss im Projekt enthalten sein. Vergewissern Sie sich, dass diese Datei im Projekt enthalten ist." Wenn ich versuche, Setup.rul unter InstallScript anzulegen, soll diese Datei schon vorhanden sein. Der Fehler tritt aber erst dann auf, wenn ich eine benutzerdefinierte Aktion angelegt habe. Lösche ich diese wieder, ist der Fehler ebenfalls weg. Was ist zu tun? |
Wie hast du denn die Setup.rul Datei erzeugt?
Schau mal welche Datei(en) es in dem \Script Files Verzeichnis gibt. Sichere deine Setup.rul Datei ggf. weg, lösche dort alle Dateien und erzeuge im Projekt eine neue Script Datei (dann sollte per default Setup.rul angelegt werden). Diese kannst du ja anschliessend durch deine Setup.rul ersetzen.
Posted 25 September 2009 - 10:48
Nun noch zwei weitere Fragen:
Gibt es eine Möglichkeit, das Script zu testen, ohne jedesmal ein neues Release erstellen zu müssen?
Wie kann ich feststellen, ob das Script während der Installation ausgeführt wird und wenn nicht, warum nicht?
Sind wahrscheinlich alles sehr laienhafte Fragen, aber ich muss mich da erst einarbeiten.

Gruß
Jürgen Markert
(Anwender von InstallShield 2016 - Professional Edition)
Posted 25 September 2009 - 12:07
QUOTE (Majue @ 2009-09-25 10:48) |
Nun noch zwei weitere Fragen: Gibt es eine Möglichkeit, das Script zu testen, ohne jedesmal ein neues Release erstellen zu müssen? Wie kann ich feststellen, ob das Script während der Installation ausgeführt wird und wenn nicht, warum nicht? Sind wahrscheinlich alles sehr laienhafte Fragen, aber ich muss mich da erst einarbeiten. ![]() |
Wenn du das Skript erfolgreich kompiliert hast, dann sollte es automatisch in die zuletzt erstellte MSI Datei gestreamt werden. D.h. man muss nicht zwingend ein neues Release erstellen, auch wenn die Frage bzw. Aufforderung kommt. Probier es einfach mal aus.
Du kannst eine Log Datei erstellen und bspw. auch zusätzliche Informationen in die Log Datei innerhalb einer IScript CA schreiben (mit SprintfMsiLog).
Posted 28 September 2009 - 09:57
das Script funktioniert soweit, leider werden aber die folgenden Variablen nicht gefüllt:
szInstallDir = MsiGetCustomActionDataAttribute( hMSI, "/INSTALLDIR=" );
szPort = MsiGetCustomActionDataAttribute( hMSI, "/PORT=" );
Ich habe die Eingaben nach deinem Beispiel vorgenommen, habe aber bestimmt - aus Unkenntnis - etwas wichtiges übersehen.

Wie muss denn der Property-Eintrag aussehen? Ich habe ihn folgendermaßen erstellt:
ApacheConf | /INSTALLDIR=[INSTALLDIR] /PORT=[PORT]
Meine Funktion heißt:
function ApacheConf(hMSI)
Ich hoffe, du hilfst mir noch einmal weiter.

Gruß
JM
Gruß
Jürgen Markert
(Anwender von InstallShield 2016 - Professional Edition)
Posted 28 September 2009 - 15:16
InstallScript Funktion: ApacheConf
InstallScript Custom Action (Deferred CA in System Context): ApacheConf
Set Property CA (Immediate Execution): ApacheConf_SetCAD
Property Name: ApacheConf
Propert Value: /INSTALLDIR=[INSTALLDIR] /PORT=[PORT]
Die Property CA würde ich z. B. hinter AppSearch (UI und Execute) sequenzen und die Deferred CA in der Execute Sequenz hinter InstallFiles. Dann noch ggf. sinnvolle Conditions setzen.
Posted 29 September 2009 - 08:21
InstallScript Funktion: ApacheConf - OK
InstallScript Custom Action (Deferred CA in System Context): ApacheConf - OK, als benutzerdefinierte Aktion, aber was genau bedeutet "Deferred CA in System Context"?
Set Property CA (Immediate Execution): ApacheConf_SetCAD - Wo gehört dieser Eintrag hin?
Property Name: ApacheConf - OK
Propert Value: /INSTALLDIR=[INSTALLDIR] /PORT=[PORT] - OK
Die Property CA würde ich z. B. hinter AppSearch (UI und Execute) sequenzen - Könntest du das bitte etwas näher erläutern?
die Deferred CA in der Execute Sequenz hinter InstallFiles - OK
Dann noch ggf. sinnvolle Conditions setzen - Kannst du bitte ein Beispiel nennen?
Vorab schon mal danke für deine Hilfe, die mich wirklich weitergebracht hat.

Bis man alle Möglichkeiten von IS nutzen kann, ist es anscheinend ein langer, beschwerlicher Weg! Zumal sind mir die englischen Begriffe nicht immer sofort klar, da ich eine deutsche Version verwende.

Gruß
JM
Gruß
Jürgen Markert
(Anwender von InstallShield 2016 - Professional Edition)
Posted 29 September 2009 - 10:02
QUOTE (Majue @ 2009-09-29 08:21) |
InstallScript Custom Action (Deferred CA in System Context): ApacheConf - OK, als benutzerdefinierte Aktion, aber was genau bedeutet "Deferred CA in System Context"? |
QUOTE |
Set Property CA (Immediate Execution): ApacheConf_SetCAD - Wo gehört dieser Eintrag hin? |
Das ist eine Custom Action zum Setzen einer Property. ApacheConf_SetCAD habe ich einfach als Name für die CA gewählt. Mit dieser CA füllt man sozusagen die CustomActionData Property für die Deferred CA
QUOTE |
Die Property CA würde ich z. B. hinter AppSearch (UI und Execute) sequenzen - Könntest du das bitte etwas näher erläutern? |
Du kannst eine CA ja innerhalb der UI Sequenz und der Execute Sequenz ausführen. Da du ja die PORT Property bereits in der UI Sequenz setzt, würde ich die CA auch shcon in der UI Sequenz ausführen und auch in der Execute Sequenz. Für diese CA benötigst du nicht zwingend eine Condition. Bei einem Silent Setup wird die PORT Property ggf. nicht initialisiert, das solltest du evtl. auch berücksichtigen.
QUOTE |
Dann noch ggf. sinnvolle Conditions setzen - Kannst du bitte ein Beispiel nennen? |
Not Installed
Posted 01 October 2009 - 09:18
nun bin ich schon ein Stück weiter, habe aber noch ein kleines Problem, bei dem du mir sicherlich weiterhelfen kannst.
Die beiden Variablen in meiner CA AppacheConf (szInstallDir und szPort) werden zwar jetzt mit Daten gefüllt, allerdings steht nun folgendes darin: [INSTALLDIR] und [PORT]
Was mache ich denn nun noch falsch? Es soll ja nicht der Name der Eigenschaft verwendet werden, sondern der darin gespeicherte Wert!
Gruß
Jürgen
Gruß
Jürgen Markert
(Anwender von InstallShield 2016 - Professional Edition)
Posted 01 October 2009 - 10:24
Und am besten auch den kompletten InstallScript Code.
Posted 01 October 2009 - 13:56
hier der InstallScript Code:
#include "ifx.h"
#include "customactiondata.rul"
function ApacheConf(hMSI)
STRING szInstallDir;
STRING szPort;
STRING szFileName;
STRING szFile;
STRING svText1;
STRING svText2;
STRING svText3;
STRING svResult;
begin
szInstallDir = MsiGetCustomActionDataAttribute( hMSI, "/INSTALLDIR=" ); funktioniert nicht
szPort = MsiGetCustomActionDataAttribute( hMSI, "/PORT=" ); funktioniert nicht
szFileName = "httpd.conf";
szFile = szInstallDir ^ "httpd.conf";
MessageBox (szInstallDir, 1); // zu Testzwecken
MessageBox (szPort, 1); // zu Testzwecken
Sprintf(svText1, "ServerRoot \"%sapache\"", szInstallDir);
Sprintf(svText2, "Listen %s", szPort);
Sprintf(svText3, "Include conf/default.conf");
FileInsertLine (szFile, svText1, 0, APPEND);
FileInsertLine (szFile, svText2, 0, AFTER);
FileInsertLine (szFile, svText3, 1, AFTER);
return ERROR_SUCCESS;
end;
Es klappt alles so, wie es sein soll, nur die beiden Variablen werden nicht richtig gefüllt.
Darüber hinaus habe ich zwei benutzerdefinierte Aktionen, die vermutlich noch nicht richtig funktionieren:
ApacheConf | Verzögerte Ausführung im Systemcontext
ApacheConf_CAD | Eigenschaftsname: CustomActionData | Sofortige Ausführung
Und es gibt noch folgende Property, die vielleicht auch noch fehlerhaft ist, da ja die Eigenschaftsnamen inkl. der Klammern angezeigt werden und nicht die Werte.
ApacheConf | /INSTALLDIR=[INSTALLDIR] /PORT=[PORT]
Hoffendlich kannst du weiterhelfen. Vorab jedenfalls schon mal danke für die Unterstützung!
Gruß
Jürgen
Gruß
Jürgen Markert
(Anwender von InstallShield 2016 - Professional Edition)
Posted 01 October 2009 - 14:27
STRING svPath;
NUMBER nvSize;
begin
nvSize = _MAX_PATH;
MsiGetProperty(hMSI, "INSTALLDIR", svPath, nvSize);
Posted 01 October 2009 - 14:40
das werde ich mal ausprobieren, ob es damit klappt!
Gruß
Jürgen Markert
(Anwender von InstallShield 2016 - Professional Edition)
Posted 01 October 2009 - 15:21
QUOTE (Majue @ 2009-10-01 13:56) |
Darüber hinaus habe ich zwei benutzerdefinierte Aktionen, die vermutlich noch nicht richtig funktionieren: ApacheConf | Verzögerte Ausführung im Systemcontext ApacheConf_CAD | Eigenschaftsname: CustomActionData | Sofortige Ausführung Und es gibt noch folgende Property, die vielleicht auch noch fehlerhaft ist, da ja die Eigenschaftsnamen inkl. der Klammern angezeigt werden und nicht die Werte. ApacheConf | /INSTALLDIR=[INSTALLDIR] /PORT=[PORT] |
Mit ApacheConf_CAD musst du die ApacheConf Property setzen (der Inhalt ist dann als CustomActionData Property in der ApacheConf CA verfügbar)
Also:
ApacheConf_CAD | Eigenschaftsname: ApacheConf| Sofortige Ausführung
Die MsiGetCustomActionDataAttribute InstallScript Funktion analysiert und zerlegt dann einfach den Inhalt der CustomActionData Property und erleichtert somit einfach die Arbeit.
Edited by Holger_G, 02 October 2009 - 11:02.
Posted 02 October 2009 - 10:43
QUOTE |
ApacheConf_CAD | Eigenschaftsname: c| Sofortige Ausführung |
Was genau soll an dieser Stelle "c" stehen? Das ist mir noch nicht ganz klar.
Gruß
Jürgen Markert
(Anwender von InstallShield 2016 - Professional Edition)
Posted 02 October 2009 - 11:03
Posted 05 October 2009 - 13:13
leider funktioniert das bei mir immer noch nicht. Wahrscheinlich bin ich zu blöd dazu

Egal, was ich auch probiere (genau so, wie du es erklärt hast) wird bestenfalls der Name der Eigenschaft (in eckigen Klammern) angezeigt, aber nie der entsprechende Wert.
Falls du (oder jemand anderes in diesem Forum) etwas Zeit hast, sieh dir doch bitte mal den Anhang an. Für einen Profi ist es sicherlich kein Problem, den Fehler zu finden.
Gruß
JM
Edited by Majue, 05 October 2009 - 13:16.
Gruß
Jürgen Markert
(Anwender von InstallShield 2016 - Professional Edition)
Posted 05 October 2009 - 15:47
Attached Files
Edited by Holger_G, 05 October 2009 - 15:48.
Posted 06 October 2009 - 08:11

Danke Holger, jetzt klappt es! Ohne dich hätte ich wohl verzweifelt aufgeben müssen.
Gruß
JM
Edited by Majue, 06 October 2009 - 08:11.
Gruß
Jürgen Markert
(Anwender von InstallShield 2016 - Professional Edition)