InstallScript - Ini Datei arbeiten
Posted 18 March 2005 - 18:27
vorweg sei gesagt, dass ich noch etwas neu mit InstallShield unterwegs bin!
Frage:
Ich habe mit InstallShield10.5 - ein-> InstallScript Project gebaut, dies klappt bis dato auch absolut prima. Nun will ich aber per Script (da es anscheinend keine andere Möglichkeit gibt) noch zwei weitere Funktionen einbringen. Mein Projekt soll eine im WINDIR befindliche *.ini Datei finden und wenn gefunden diese um einen Eintrag in bestimmter Section ergänzen und erst dann die Installation fortsetzen. Wenn die ini - Datei nicht vorhanden ist, soll die Installation abbrechen.
In der Hilfe von InstallShield, habe ich dazu ein Muster gefunden und für mich geändert.
Nun befindet sich "Before move Data" -> "OnAppSearch" folgendes Script.
*************************
function OnAppSearch( )
NUMBER nResult;
STRING svIgnore;
begin
nResult =
FindAllFiles(WindowsFolder, "winacs.ini",
svIgnore, RESET);
if (nResult < 0) then
MessageBox("Es konnte die entsprechende ini-Datei nicht gefunden werden. " +
"Setup wird abgebrochen.", SEVERE);
abort;
endif;
WriteProfInt ( winacs.ini , VERSIONEN , 65388 , 65389 );
end;
*************************
Beim Kompilieren erscheint aber immer folgende Fehlermeldung:
...Fehler C8025: 'WindowsFolder' : Undefinierte ID
...Fehler C8039: 'WindowsFolder' : String-Wert erforderlich
...Fehler C8025: 'winacs' : Undefinierte ID
...Fehler C8044: '.' : typedef-Typ erforderlich
Wie gesagt, bin noch neu im InstallShield unterwegs und kann mit diesen Fehlermeldungen noch nichts anfangen. Sorry!
In einem extra Projekt hatte dies zu Testzwecken voll funktioniert!
Kann ich dieses Script in meinem bestehenden Projekt überhaupt nutzen oder muss das ganze Projekt neu in anderer Form (z.B. MSI BasisProjekt etc.) erstellt werden?
Für die Fachleute unter Ihnen sicherlich nichts Weltbewegendes, für mich ist aber Scripting noch etwas neues.
Viele Grüße & Vielen Dank
tftools
Posted 21 March 2005 - 09:27
Stefan Krüger
InstallSite.org twitter facebook
Posted 23 March 2005 - 21:49
habe mal WinDir probiert.
Wird auch angenommen aber beim kopilieren erscheint noch die Meldung:
Fehler C8025: 'winacs' : Undefinierte ID
Fehler C8044: '.' : typedef-Typ erforderlich
Was muss ich bei meiner ini Namens winacs.ini noch definieren??
Danke for your Mühe!
tftools
Posted 24 March 2005 - 09:07
CODE |
WriteProfInt ( winacs.ini , VERSIONEN , 65388 , 65389 ); |
CODE |
WriteProfInt ( WINDIR ^ "winacs.ini" , VERSIONEN , "65388" ,"65389" ); |
Gehe ich recht in der Annahme, dass Du VERSIONEN als globale Variable definiert hast, der schon ein sinnvoller Wert zugeordnet wurde? Gehe ich weiter recht in der Annahme, dass Du dann einen Eintrag
[%VERSIONEN%]
65388=65389
in der winacs.ini haben willst?
PS: bei der Verwendung von winacs.ini (ohne "") nimmt IS an, Du hast einen Typ winacs definiert, uns möchtest Du darin enthaltene Variable ini nutzen ... daher die Frage nach der nicht definierten ID winacs und dem typedef.
Edited by Perotin, 24 March 2005 - 09:09.
Thomas
Posted 24 March 2005 - 19:44
ich will meine winacs.ini um einen Eintrag betreffs Update erweitern.
Die Variable [VERSIONEN] bzw. [UPDATE] gibt es in meiner winacs.ini
schon! Komplett sieht die winacs.ini an dieser Stelle so aus!
[UPDATE]
Update Installation 6.51=JA
Update Installation 6.52=JA
Update Installation 6.53=JA
[VERSIONEN]
65021=65020
65111=65107
65303=65303
65113=65108
65277=65276
65279=65276
65303=65301
65306=65308
65388=65389
Dabei sind die Zeilen
Update Installation 6.53=JA
und die Zeile
65388=65389
von meinem IS Projekt per Scrip mit einzufügen.
Deinen Tip mit
WriteProfInt ( WINDIR ^ "winacs.ini" , VERSIONEN , "65388" ,"65389" );
habe ich versucht und IS meldet mir dann;
Fehler C8025: 'VERSIONEN' : Undefinierte ID
Fehler C8039: 'VERSIONEN' : String-Wert erforderlich
Fehler C8038: '65389' : Numerischer Wert erforderlich
Den anderen Tip mit
WriteProfInt ( winacs.ini , VERSIONEN , 65388 , 65389 );
habe ich ebenfalls probiert und dabei meldet mir IS;
Fehler C8025: 'winacs' : Undefinierte ID
Fehler C8044: '.' : typedef-Typ erforderlich
Hier nochmal mein komplettes Script.
Klar, mit // habe ich die jeweilige Versuchzeile ein bzw. ausgeschaltet!
function OnAppSearch()
NUMBER nResult;
STRING svIgnore;
begin
nResult =
FindAllFiles(WINDIR, "winacs.ini",
svIgnore, RESET);
if (nResult < 0) then
MessageBox("Es konnte die entsprechende ini-Datei nicht gefunden werden. " +
"Setup wird abgebrochen.", SEVERE);
abort;
endif;
//WriteProfInt ( winacs.ini , VERSIONEN , 65388 , 65389 );
//WriteProfInt ( WINDIR ^ "winacs.ini" , VERSIONEN , "65388" ,"65389" );
// WriteProfInt ( winacs.ini , VERSIONEN , 65388 , 65389 );
end;
Es kann doch nicht großes mehr sein (Shit),
oder ist ein InstallScript Projekt dafür nicht geeignet?
Für Deine Mühen vielen Dank im voraus!
tftools
Edited by tftools, 24 March 2005 - 19:45.
Posted 26 March 2005 - 09:26
CODE |
WriteProfInt ( WINDIR ^ "winacs.ini" , "VERSIONEN" , "65388" ,"65389" ); |
Stefan Krüger
InstallSite.org twitter facebook
Posted 26 March 2005 - 12:43
habe die Zeile;
WriteProfInt ( WINDIR ^ "winacs.ini" , "VERSIONEN" , "65388" ,"65389" );
ausprobiert und denke so langsam aber sicher, das wir es bald geschafft habe.
Jetzt erscheint nämlich nur noch folgende Fehlermeldung;
... Fehler C8038: '65389' : Numerischer Wert erforderlich
Danke for your Mühen!
tftools
Posted 29 March 2005 - 21:11
kann mir noch jemand sagen wie ich den numerischen Wert
zu definieren habe, um auch diesen Fehler raus zu bekommen!
... Fehler C8038: '65389' : Numerischer Wert erforderlich
Bin für jede Hilfe dankbar.
Mal sehen, vielleicht kann ich ja zukünftig auch mal
Hilfestellung geben!
Danke
tftools
Posted 30 March 2005 - 08:15
CODE |
WriteProfInt ( WINDIR ^ "winacs.ini" , "VERSIONEN" , "65388" , 65389 ); |
Stefan Krüger
InstallSite.org twitter facebook
Posted 30 March 2005 - 19:57
möchte mich an dieser Stelle bei Stefan und Thomas bedanken.
Das Setup ist fertig und funktioniert prima. Habe dank Eurer Hilfe wieder viel gelernt und schon wieder neue Verbesserungen im Sinn.
Aber, für alle die einmal mit einem InstallShield 10.5 und per InstallScript einen ini - Eintrag ergänzen wollen hier die Lösung!
Bei meinem Bsp. ist die winacs.ini meine im Windowsverz. befindliche ini Datei!
Diese besitzt feste Variablen.
z.Bsp: bei mir [VERSIONEN] und [Update]
Zu Begin der Installation soll mein InstallShield nachschauen ob es die winacs.ini überhaupt gibt. Wenn NEIN soll er mit entsprechender Meldung abbrechen!
Wenn JA (vorhanden) soll er die jeweilige winacs.ini um jeweils einen Eintrag ergänzen.
// OnBegin
//
// The OnBegin event is called directly by the framework after the setup
// initializes. Note that this event will be called AFTER "Initialization"
// events (i.e.) OnSetTARGETDIR, OnCheckMediaPassword.
//
// Note: This event will not be called automatically in a
// program...endprogram style setup.
//---------------------------------------------------------------------------
function OnBegin()
NUMBER nResult;
STRING svIgnore;
begin
nResult =
FindAllFiles(WINDIR, "winacs.ini",
svIgnore, RESET);
if (nResult < 0) then
MessageBox("Es konnte die notwendige winacs.ini Datei nicht gefunden werden. " +
"Setup wird abgebrochen.", SEVERE);
abort;
endif;
WriteProfInt ( WINDIR ^ "winacs.ini" , "VERSIONEN" , "65388" , 65389 );
WriteProfString ( WINDIR ^ "winacs.ini" , "UPDATE" , "Update Installation 6.54" , "JA" );
end;
Danke
tftools
Edited by tftools, 30 March 2005 - 21:49.
Posted 30 March 2005 - 21:49
hier betreffs meiner ini Erweiterung noch etwas für Feinschmecker. Ich sprach ja etwas weiter oben schon über weiterführend Verbesserungen.
Das Script ist etwas erweitert wurden!
Nun soll es im ersten Schritt schaun ob einen gültige winacs.ini vorhanden ist.
Ist dies nicht der Fall soll der InstallShield diese melden und von einen Neuinstallation meines Programms ausgehen. (Im nächsten Schritt erhält der User die Möglichkeit eine gültige winacs.ini neu zu installieren.
Ist meine gesuchte winacs.ini aber im WINDIR vorhanden soll Sie um die entsprechenden Einträge ergänzt werden!
Vielleicht hilfe es ja auch mal jemanden!
Ciao
tftools (the beginner)
function OnBegin()
NUMBER nResult;
STRING svIgnore;
begin
nResult =
FindAllFiles(WINDIR, "winacs.ini",
svIgnore, RESET);
if (nResult = 0) then
MessageBox("In Ihrem WindowsVerz. wurde eine gültige winacs.ini gefunden."+
" Diese wird nun um den aktuellen Updatestand erweitert.",SEVERE);
WriteProfInt ( WINDIR ^ "winacs.ini" , "VERSIONEN" , "65309" , 65310 );
WriteProfString ( WINDIR ^ "winacs.ini" , "UPDATE" , "Update Installation 6.53" , "JA" );
else
if (nResult < 0) then
MessageBox("Das Setup konnte in Ihrem lokalen WindowsVerz. die für den Update ini-Eintrag notwendige winacs.ini nicht finden."+
" Das Setup arbeite jetzt ohne diesen Updateeintrag weiter. Bitte installieren Sie im nächste Schritt eine für Sie notwendige und gültige winacs.ini.",SEVERE);
//abort;
endif;
endif;
end;