Programm-Update über Netzwerk

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Outsider77.

    Programm-Update über Netzwerk

    Guten Morgen zusammen,

    ich habe ein Programm geschrieben, welches bei uns in der Firma abteilungsübergreifend genutzt wird. Um dieses upzudaten, benutze ich eine selbstgeschriebene update.exe. Diese beendet bei Button-Klick das Hauptprogramm, kopiert die neue .exe-Datei des Hauptprogramms und startet diese wieder.
    Jetzt ist es so, dass beim Schließen des Hauptprogrammes einige vorher lokal gespeicherte .pdf-Dateien gelöscht werden. Da dies schon auch mal etwas mehr sein können, verzögert sich das Beenden des Hauptprogrammes dementsprechend ein Wenig.
    Leider kommt es dann zum Fehler, wenn die update.exe bereits versucht, die neue .exe-Datei des Hauptprogrammes zu kopieren/überschreiben.
    Ich möchte als Erstes wissen, ob mein Weg, das Hauptprogramm upzudaten, ein Kluger oder Unkluger ist? Ich habe mir überlegt, wie ich das Problem lösen könnte. Die update.exe könnte solange mit dem Kopiervorgang warten, bis der Prozess des Hauptprogrammes komplett beendet ist. Was dieses Thema angeht, muß ich mir aber erstmal noch ein paar Sachen zu durchlesen. Bin ich denn grundsätzlich auf dem richtigen Weg?

    Vielen Dank für Eure Hilfe und einen guten Start in den Tag!

    Gruß Markus
    Moin,
    ja klar, so habe ich es ja. Ging halt nur darum, so lange mit der update.exe zu warten, bis auch die letzte PDF-Datei gelöscht wurde.
    Ich hab das inzwischen gelöst bekommen.

    VB.NET-Quellcode

    1. While System.Diagnostics.Process.GetProcessesByName("???").Length > 0
    2. System.Threading.Thread.Sleep(500)
    3. End While
    Und was wenn der Process länger als 500 ms braucht? Dann haste das selbe Problem.

    Die Process Klasse hat ein Event Exited, dass du abonnieren kannst. Dort kannst du dann den Code reinschreiben, den du ausführen möchtest, nachdem das andere Programm fertig ist.

    Alternativ, wenn dein "Hauptprogramm" in der Zwischenzeit absolut nichts tut, kannst du auch mit Process.WaitForExit() auf die Schließung des anderen Programms warten.
    Also wenn ich die Schleife richtig interpretiere, wird der Thread solange "schlafen gelegt", bis mein Prozess ??? nicht mehr existiert.
    Sollte eigentlich das Selbe bei rauskommen, wie wenn ich es über Exited abfrage...und tut es auch ;)

    Die Farbe "rot" gehört der Moderation. ~Trade

    Edit: Sorry!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Outsider77“ ()

    Ich möchte nochmal auf die PDF-Dateien zu sprechen kommen.
    Ich möchte es gern so machen, dass diese nicht erst beim Beenden des Programmes gelöscht werden,
    sondern bereits dann, wenn sie nicht mehr benötigt werden. Das wäre dann der Fall, wenn ein anderer Eintrag in der Listbox selektiert wird.
    OK, also versuche ich, beim ListBox_SelectedIndexChanged alle PDF-Dateien außer der zum selektierten Item zugehörigen zu löschen
    Leider bekomme ich dabei eine Fehlermeldung, nämlich genau zu der zuletzt angezeigten PDF-Datei, dass diese nicht zu löschen sei, da sie von einem anderen Prozess verwendet wird.
    Gibt es einen zuverlässigen Weg, die zuletzt angezeigte PDF-Datei beim Wechsel freizugeben, sodass sie gelöscht werden kann. Mit .Dispose() kann ich danach nicht mehr auf das WebBrowser.Control zugreifen.
    Danke vorab für die Hilfe!

    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Outsider77“ ()

    Woher kommt "jetzt" (ok, Post#8 ist vom 9.3.) das WebControl-CE? Egal.
    Du bekommst ne Fehlermeldung, wenn Du löschen willst, aber die Dateien offiziell noch in Benutzung sind. Nutze diese Meldung.
    Das Problem habe ich bei Visual Studio mit Projekten. Visual Studio beendet, ich will den Projektordner löschen und Windows zetert rum, dass das nicht ginge. VS braucht also selber noch ein bisschen Nachlaufzeit, bis es jenes Projekt nicht mehr nutzt.
    Und nun zum Ausnutzen der Fehlermeldung: Mach Dir ne Schleife von z.B. 10 Durchläufen. Versuch ein Löschen. Klappt es, dann die Schleife verlassen, sonst Däumchen drehen und nochmals versuchen.
    In Pseudocode:

    Quellcode

    1. For Versuchsindex = 1 To 10
    2. Try
    3. LöscheDatei(DeinDateiPfad)
    4. Exit For
    5. Catch Ex As KeinZugriffException
    6. Warte500Millisekunden
    7. End Try
    8. Next

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.