Servus!
Ich sitze wiedermal vor einem leidigem Thema.
Ich habe auf einer VMWare eine Routersoftware (IPCop
) installiert und wollte folgendes:
Der Windows (2000) PC auf dem die VMWare installiert ist sollte beim Starten noch vor der Windows-Anmeldung anhalten und die VMWare vollständig zuende laden. Sobald das geschehen ist darf Windows sein Zeug weiterladen.
Soweit sogut oder auch nicht.
Fangen wir Rückwärts an.
Wie bekomme ich Windows dazu anzuhalten? Gibt es zwei Wege.
Weg 1: Programm als Run Once-Service registrieren. Windows hält den Start solange auf bis sich das Programm selbständig wieder schließt. Etwas umständlich aber notdürftig tut es seinen Job.
Weg 2: Programm als Startskript über den Gruppenrichtlinieneditor eingebunden. Mit ein paar Änderungen der Sicherheitsrichtlinien lässt sich das ganze so konfigurieren, dass Windows sich ähnlich verhält wie beim Run Once-Service. Es wartet also bis sich das Programm beendet hat und lädt dann seinen kram.
Wie stelle ich fest ob die VMWare mit der Routersoftware vollständig geladen ist? Ich sende wärend des Starts in einem bestimmten Zeitraum Ping-Pakete an die Router-
IP. Funktioniert.
Wie starte ich die VMWare?
Jedesmal im Programm über ShellExecute. Ich hab mehrere Varianten durchprobiert.
Einmal rufe ich die VMWare mit ShellExecute direkt auf:
Etwas kompliziert - hier nur das wichtigste:
Delphi-Quellcode:
...
Ergebnis := ShellExecute (hInstance, 'open', PChar (Programm), PChar (Parameter), nil, ShowCmd);
...
Die Variablen:
Programm - "C:\...\VMWare.exe"
Parameter - "C:\Router\...\....vmx" -x
ShowCmd - swHide - eigentlich soll das Flag bewirken, dass die VMWare nicht zu sehen ist. Aber scheinbar schaukelt sich die VMWare so, dass sie doch sichtbar ist - ist aber nicht so tragisch da alles gesamt später von Windows versteckt wird.
Eine andere Variante die ich ausprobierte ist der Start über die nette cmd.exe
Die Variablen hier:
Programm - "...\cmd.exe"
Parameter - "/C ""C:\...\VMWare.exe" "C:\Router\...\....vmx" -x"
Und noch eine Variante die ich durch hab: Ich fertigte eine BAT-Datei an die ich hier an dieser Stelle nur noch aufzurufen brauchte.
Alle drei Varianten funktionieren soweit ganz gut und zeigen gleiches Ergebnis.
Wie läuft das ganze insgesamt ab?
Windows startet, bleibt noch vor der Anmeldung stehen.
Das Programm startet, prüft über Ping ob bereits die VMWare mit Routersoftware läuft.
Wenn nicht startet es über ShellExecute die VMWare. Die VMWare öffnet sich und lädt die Routersoftware.
Der ganze Ablauf wird durch einen Statusbalken überwacht und sobald alles fertig ist schließt sich das Programm, die VMWare bleibt offen (!) und Windows startet weiter.
Das ganze funktioniert so eigentlich wunderbar. Aber, und das ist mein Problem, sobald Windows weiter startet und sich mein Programm geschlossen hat schließt es ebenso auch die VMWare mit! Und hier weiß ich nicht weiter und bitte um Rat und Tat
So, noch etwas dazu: Konfiguriere ich Windows so, dass es nicht auf das Programm wartet dann lässt es dies und die VMWare beim Laden im Hintergrund verschwinden. Im Taskmanager ist noch zu sehen wie die VMWare geladen wird und sich das/mein Programm selbständig beendet. Es ist also im Windows nichts mehr von Routersoftware oder Fenstern zu sehen. Und genau das ist auch mein Ziel.
Der Ladevorgang der Routersoftware sollte so schnell und zeitig wie möglich passieren, deswegen lasse ich Windows warten, und das Fenster soll im Anschluss daran nicht mehr zu sehen sein.
Das sind die Gründe für mein tun.
So, ich hoffe das reicht soweit und erstmal Danke und Gruß!
Robert