J'écris le système de mise à jour pour mon application et j'ai besoin d'éteindre l'application pour écraser l'exe mais après l'arrêt je dois exécuter l'exécutable de mise à jour, comment puis-je faire?Fermer l'application et exécuter une application externe
Répondre
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()
{
// ...
}
Exécutez le fichier exécutable de mise à jour avant d'arrêter l'application.
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().
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.
- 1. Fermer une fenêtre de navigateur d'une application ASP.NET et AJAX
- 2. Comment fermer une application C# sans formulaire
- 3. Exécuter l'exe externe du flash du projecteur
- 4. Comment héberger une application externe dans WPF?
- 5. Intégrer une application externe sous Windows
- 6. Comment lancer et exécuter un script externe en arrière-plan?
- 7. Réduire une application externe avec Delphi
- 8. Comment faire pour exécuter une application Qt?
- 9. Fermer les gadgets Vista depuis une autre application
- 10. Pour fermer ou ne pas fermer: une application de dialogue lorsque vous appuyez sur "Echap"
- 11. Ouvrir/fermer une application winform à partir d'ASP.NET
- 12. Comment concevez-vous une application pour exécuter une machine?
- 13. Exécuter une fonction JavaScript dans une application C#
- 14. Exécuter le code sur le formulaire WPF fermer
- 15. Comment désactiver le menu contextuel dans une application externe lancée
- 16. fermer une fenêtre
- 17. Comment afficher et fermer une vue depuis un contrôleur?
- 18. ASP.NET: Exécuter un exécutable externe ne fonctionne pas
- 19. Exécuter des commandes à partir d'un fichier externe dans Rails
- 20. Question DirectDraw - exécuter l'application comme une application Windows régulière
- 21. Comment exécuter un programme externe à partir de Java?
- 22. Idées pour une application Web avec entrée externe et notification en temps réel
- 23. Exécuter la fonction JavaScript avec le lien externe chargé
- 24. Comment exécuter un outil externe dans Eclipse en mode débogage
- 25. exécuter une même application haskell prendre diff temps
- 26. Exécuter une application de console à partir d'une fenêtre Formulaire
- 27. Application Web pour exécuter une tâche de fourmi
- 28. Comment fermer une connexion NHibernate?
- 29. Exécuter un fichier externe à partir d'Eclipse PDT?
- 30. Puis-je exécuter des scripts PowerShell dans une application Silverlight?
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. –
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. –
Avez-vous manqué la partie Exception? Bien sûr, vous voulez un code plus robuste, mais c'est un concept seulement. – Samuel