2009-04-03 11 views

Répondre

2

Pourriez-vous simplement démarrer le programme de mise à jour en utilisant Process.Start et attendre que votre programme principal se ferme? Je pense que ce serait la solution la plus simple. Vous pouvez également avoir un programme de lancement distinct qui vérifiera les mises à jour et les mises à jour avant de lancer l'application principale. Mais cela conduit au même problème si vous devez mettre à jour le lanceur.


Le long des lignes de ceci:

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

Il y a un bug dans votre code. Si deux processus nommés "program.exe" sont en cours d'exécution, celui qui doit être mis à jour s'arrête et vous attendez le mauvais processus. J'éviterais d'attendre en fonction du nom du processus. Une sorte de communication entre les deux processus serait probablement meilleure. –

+0

Peut-être un sémaphore nommé en combinaison avec un court délai. Ou juste vérifier à plusieurs reprises si l'exécutable peut être ouvert pour l'écriture. –

+0

Avez-vous manqué la partie Exception? Bien sûr, vous voulez un code plus robuste, mais c'est un concept seulement. – Samuel

-2

Exécutez le fichier exécutable de mise à jour avant d'arrêter l'application.

0

Je suppose que vous avez besoin d'une autre petite application de mise à jour. Vous démarrez avec Process.Start(), laissez ce processus d'assistance remplacer l'exécutable et redémarrez le nouveau avec Process.Start().

3

Faites-le à l'envers. Obtenez l'ensemble du fichier mis à jour en utilisant l'ancienne application (en le stockant temporairement), puis démarrez l'application de mise à jour en utilisant le démarrage du processus. Tout ce que la mise à jour a à faire est de copier le nouveau fichier sur l'ancien fichier et de redémarrer l'application.

Le programme de mise à jour peut intercepter les exceptions d'accès refusé et attendre que l'application devienne disponible pour être copiée. Une fois la copie terminée, elle supprime le nouveau fichier temporaire et redémarre l'application avant de s'éteindre.

Ensuite, vous pouvez mettre à jour le programme de mise à jour (en utilisant l'application normale) si nécessaire.

Questions connexes