Ich schreibe das Update-System für meine Anwendung, und ich muss die Anwendung herunterfahren, um die Exe zu überschreiben, aber nachdem es heruntergefahren wird, muss ich die ausführbare ausführbare Datei ausführen, wie kann ich das tun?Anwendung schließen und eine externe Anwendung ausführen
Antwort
Könnten Sie einfach den Updater mit Process.Start
starten und warten, bis Ihr Hauptprogramm schließt? Ich denke, das wäre die einfachste Lösung.
Oder Sie könnten ein separates Launcher-Programm haben, das vor dem Start der Hauptanwendung nach Updates sucht und aktualisiert. Dies führt jedoch zu dem gleichen Problem, wenn Sie den Launcher aktualisieren müssen.
Nach dem Vorbild dieses:
static void Main(string[] args)
{
var haveToUpdate = ...;
if (haveToUpdate)
{
Process.Start("update.exe");
Environment.Exit(0);
}
}
static void Main(string[] args)
{
var processes = Process.GetProcessesByName("program.exe");
if (processes.Length > 1)
throw new Exception("More than one program.exe running");
else if (processes.Length == 0)
Update();
else
processes[0].Exited += new EventHandler(Program_Exited);
}
static void Program_Exited(object sender, EventArgs e)
{
Update();
}
static void Update()
{
// ...
}
das ausführbare Update ausführen, bevor Sie die Anwendung herunterfahren.
Ich denke, Sie brauchen eine andere kleine Update-Anwendung. Sie starten es mit Process.Start(), lassen Sie diesen Hilfsprozess die ausführbare Datei ersetzen und starten Sie die neue mit Process.Start() erneut.
Tun Sie es in umgekehrter Reihenfolge. Holen Sie die gesamte aktualisierte Datei mit der alten Anwendung herunter (temporär speichern) und starten Sie dann die Updater-Anwendung mit Prozessstart. Alles, was das Update tun muss, ist, die neue Datei über die alte Datei zu kopieren und die Anwendung neu zu starten.
Der Updater kann die Ausnahmen mit Zugriffsverweigerung abfangen und darauf warten, dass die Anwendung für das Kopieren verfügbar wird. Sobald die Kopie fertig ist, löscht sie die temporäre neue Datei und startet die Anwendung erneut, bevor sie heruntergefahren wird.
Dann können Sie den Updater aktualisieren (mit der normalen Anwendung), wenn Sie müssen.
- 1. Force Schließen, wenn ich diese Anwendung ausführen
- 2. Java: "Control" Externe Anwendung
- 3. Externe Playstore Anwendung öffnen
- 4. vb.net temporaraly externe Anwendung deaktivieren
- 5. Schließen Sie eine Java-Anwendung und starten Sie eine andere Anwendung
- 6. Starten Sie eine externe Anwendung von node.js
- 7. Verhindern, Java Swing-Anwendung zu schließen Anwendung
- 8. Kraft der Anwendung schließen
- 9. Eine qt Gui Anwendung programmatisch sauber schließen
- 10. Embed externe Anwendung unter Windows
- 11. Screenshot nicht aktive externe Anwendung
- 12. Schließen der Anwendung und Benachrichtigen Renderer Prozess
- 13. Eine Anwendung aktualisieren, ohne sie zu schließen
- 14. Appium - Schließen Sie eine iOS-Anwendung und öffnen Sie erneut eine Anwendung
- 15. Hören cmd.exe durch externe Anwendung
- 16. Externe Konfiguration für Spring-Boot-Anwendung
- 17. Fenster schließen ohne zu schließen Anwendung
- 18. Firing-Ereignis bei Anwendung schließen
- 19. Formular schließen, aber Anwendung läuft
- 20. Anwendung vom Browser ausführen
- 21. JAVA GUI Schließen Anwendung Dialog
- 22. android- Neustart-Anwendung auf Kraft schließen
- 23. C# Windows Forms-Anwendung schließen
- 24. Schließen der Aktivität anderer Anwendung
- 25. erzwinge das Schließen der Anwendung
- 26. Schließen Excel-Anwendung mit Powershell
- 27. Abfangen von Anwendung in c schließen #
- 28. Eine groovige Anwendung unter Maven ausführen
- 29. Wie kann eine externe Anwendung nur auf eine Tabelle zugreifen?
- 30. Verhindern Screenshot nach dem Schließen der Anwendung
Ihr Code enthält einen Fehler. Wenn zwei Prozesse mit dem Namen "program.exe" ausgeführt werden, wird der zu aktualisierende Prozess beendet und Sie warten auf den falschen Prozess. Ich würde vermeiden, basierend auf dem Prozessnamen zu warten. Eine Art der Kommunikation zwischen den beiden Prozessen wäre wahrscheinlich besser. –
Vielleicht ein benanntes Semaphor in Kombination mit einer kurzen Verzögerung. Oder überprüfe einfach immer, ob die ausführbare Datei zum Schreiben geöffnet werden kann. –
Haben Sie den Ausnahmeabschnitt vermisst? Natürlich möchten Sie einen robusteren Code, aber das ist nur ein Konzept. – Samuel