Frage

Ich habe eine VB6-Anwendung, die es selbst aktualisieren muss. Zu diesem Zweck hat die PM mit einer Batch-Datei empfohlen, die von der Anwendung gestartet werden soll. Die Batch-Datei sollte den Prozess töten, um die neue Version von einem lokalen Server herunterladen, die alten Dateien überschreiben und starten Sie die Anwendung erneut.
Mein Problem dabei ist, dass ich nicht sicher bin, dass taskkill kehrt die die übergeordnete Steuerung erst nach dem Prozess getötet wurde und alle verwendeten Ressourcen freigegeben wurden; Insbesondere fragen wir, was EXE-Datei auf den Prozess geschieht. Gibt es eine Garantie, dass es nach taskkill kehrt entsperrt werden? -. Natürlich theoretisch sollte es nicht von einem anderen Prozess gesperrt werden, dies ist der einzige Fall, dass wir interessiert sind,

War es hilfreich?

Lösung

Wenn der Prozess abgebrochen wird, dann wird die exe für das Update freigegeben werden. Als Alternative zur Verwendung von taskkill, können Sie pskill von Sysinternals verwenden, aber taskkill sollte mit dem / IM-Parameter große Arbeit.

Doch weder pskill oder taskkill nicht warten, bis der Prozess vor zu stoppen Steuerung zurück. Sie würden also die Prozesse überwachen müssen, um sicherzustellen, dass sie nicht mehr ausgeführt wird.

Auch, und das meine bevorzugte Lösung wäre, dann ist es möglich, eine VB6 App per Klick einmal zu implementieren, die automatisch die App mit neuen Versionen aktualisiert. Prüfen Sie diesem Artikel .

Wie bei den Ressourcen durch das Verfahren eröffnet, ist es möglich, dass sie offen bleiben könnten (wie eine SQL-Verbindung), aber wahrscheinlich werden sie erfolgreich abgeschlossen werden. Sie werden nur in der Lage sein, sicher zu wissen, was durch die Überwachung von taskkill auf dem Prozess testet passiert.

Ich hoffe, das hilft.

Andere Tipps

Ich tue dies, indem man die App selbst nach Updates suchen. Wenn ja, dann lädt die App sie in einem temporären Ort. Danach wird es einen (js) Skript starten und tritt aus dem App. Dieses Skript wird für den Prozess warten, bis (Schlaf) zu schließen, um das Updates kopieren und wieder die App starten.

Auf diese Weise haben Sie viel weniger Logik im Skript, und Sie können Ihre Sachen in einer Umgebung, Sie haben mehr Werkzeuge zur Verfügung zu tun.

Haben Sie einen Kommandozeilenparameter wie / Shutdown, dass das VB-Programm verarbeitet.

MyApp.exe / Shutdown

/ Shutdown-Parameter finden Instanz der App bestehende laufen (mit Findwindow API) und reibungslos eine Benutzermeldung an das Fenster, um es zur Abschaltung anfordert senden.

Taskkill sollte nur zurückkommen, nachdem der Prozess beendet wurde (gemäß Kommentaren unten: Verwenden Sie die / F-Flag Beendigung des Programms zu zwingen, wenn es eine Benutzereingabe erwartet)

.

Um mehr darüber zu erfahren Sie Process Explorer verwenden können, und genau sehen, wenn der Prozess beendet ist, und auch, wenn noch jemand hat die eXE-Datei öffnen (Strg + F und den Namen der exe.) - aber das sollte nicht der Fall sein,

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top