2009-04-03 16 views

Antwort

2

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() 
{ 
    // ... 
} 
+0

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. –

+0

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. –

+0

Haben Sie den Ausnahmeabschnitt vermisst? Natürlich möchten Sie einen robusteren Code, aber das ist nur ein Konzept. – Samuel

-2

das ausführbare Update ausführen, bevor Sie die Anwendung herunterfahren.

0

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.

3

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.

Verwandte Themen