Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

InstallScript - Ini Datei arbeiten


10 replies to this topic

tftools

tftools
  • Full Members
  • 22 posts

Posted 18 March 2005 - 18:27

Hallo,

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



Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 21 March 2005 - 09:27

WindowsFolder gibt es glaube ich nur in MSI Projekten. Bei InstallScript heiist die entsprechende Variable WINDIR. Probier's mal damit.

tftools

tftools
  • Full Members
  • 22 posts

Posted 23 March 2005 - 21:49

Hallo,

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




Perotin

Perotin
  • Full Members
  • 407 posts

Posted 24 March 2005 - 09:07

wie wäre es, wenn Du die Zeile
CODE
WriteProfInt ( winacs.ini , VERSIONEN , 65388 , 65389 );
wie folgt änderst:
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.

Gruß / regards
Thomas

tftools

tftools
  • Full Members
  • 22 posts

Posted 24 March 2005 - 19:44

Hallo Thomas,

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.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 26 March 2005 - 09:26

Dann muss die Zeile so aussehen:
CODE
WriteProfInt ( WINDIR ^ "winacs.ini" , "VERSIONEN" , "65388" ,"65389" );


tftools

tftools
  • Full Members
  • 22 posts

Posted 26 March 2005 - 12:43

Hallo,

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

tftools

tftools
  • Full Members
  • 22 posts

Posted 29 March 2005 - 21:11

Hallo Zusammen,

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

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 30 March 2005 - 08:15

Sorry, mein Fehler. Ich dachte an WriteProfString. Für WriteProfInt muss die Zeile so aussehen:
CODE
WriteProfInt ( WINDIR ^ "winacs.ini" , "VERSIONEN" , "65388" , 65389 );


tftools

tftools
  • Full Members
  • 22 posts

Posted 30 March 2005 - 19:57

Hallo

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.


tftools

tftools
  • Full Members
  • 22 posts

Posted 30 March 2005 - 21:49

Hallo Zsam,

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;