Installer schreiben
-
Guten Morgen @all.
Folgenden Vorgang unter Win2000 möchte ich automatisieren:
Installation von Software1 auf dem Rechner (hat ne setup.exe).
Installation von Software2 auf dem Rechner (hat ne setup.exe).
Kopieren von diversen Dateien aus Verzeichnissen von Software2 in Verzeichnisse der Software1 und andersherum.Hab bis jetzt 2 Ansätze verfolgt:
- Batch Datei
- C/C++ Prog
In beiden Ansätzen hab ich die folgenden Probleme: Das Programm muss warten, bis der Installer von Software1 bzw. Software2 fertig ausgeführt wurde. Dann brauch ich einen return-Code, der mir sagt, ob die Installation erfolgreich war. Und letztendlich brauch ich noch die beiden Pfade in denen die Software installiert wurde, damit ich die Dateien suchen und kopieren kann.
Ich möchte die Installationspfade nicht hardcoden, weil das Programm von anderen benutzt werden soll. Und da weiß man nie, ob die sich an die Anleitung halten.Oder gibt es bessere Ansätze soetwas zu erreichen?
-
Würd ich komplett als Programm schreiben.
Bei Erstinstallation kommen beide Verzeichnisse in die Registry, dafür ist sie da. Und dort werden sie auch wieder ausgelesen.Denke daran, auch einen Uninstaller zu entwerfen, der die Registryeinträge wieder entfernt.
-
Registry ist ne super Idee. Bleibt nur noch das eine Problem: Wie kann ich mein Programm so lange anhalten, bis das Setup der beiden Softwarepakete abgeschlossen wurde?
-
mit createmutex oder so was ähnlichem kannst du über programme hinweg aufeinander warten
-
Die beiden Softwarepakete sind aber nicht von mir. Also kann ich leider keine IPC Mittel einbauen.
-
Du kannst per WaitForMultipleObjects() und vergleichbaren Funktionen auf alles mögliche warten - auch auf das Ende eines vorher gestarteten Prozesses.
-
Hab ich mir eben mal durchgelesen. Ich weiß aber nicht, ob dass für mein Problem benutzt werden kann. Denn aus meinem Programm kann ich ja nur den anderen Installer über
System("\\pfad\\zum\\programm\\setup.exe");
aufrufen.
Wenn ich das mit den WaitForXXXObject()-Funktionen richtig verstanden habe, muss der gestartete Prozess ein Event setzen, dass der aufrufende Prozess erwartet. Aber ich komm ja an die setup.exe nicht ran.
-
Dann solltest du deine Setup-Programme besser per CreateProcess() starten - die liefert im letzten Parameter auch einen Prozess-Handle mit, auf den du mit den Wait-Funktionen warten kannst (afair gilt ein Prozess als "signaled", wenn er beendet wurde).