Bonjour !
J'ai mis en place une gestion de versioning avec ClickOnce, ça marchait nickel jusqu'au moment où j'ai du gérer les instances d'application, c'est à dire, ne pouvoir lancer qu'une seule instance de l'application.
Quand mon Update est fini:
MainForm.cs :
Donc ceci marchait très bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 /// <summary> /// Evènement sur l'update finalisé de la version /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void applicationDeployment_UpdateCompleted(object sender, AsyncCompletedEventArgs e) { this.Close(); Application.Restart(); }
Note: J'ai mis un this.Close(); avant le Application.Restart();, car quand je relançais l'appli avec un restart(); seulement, il ne me quittait pas l'instance précédente -___-.
Pour gérer la condition que l'appli ne pouvait avoir qu'une instance en cours, j'ai mis en place une gestion de Process (codes trouvés sur le web).
Program.cs :
En bref, comment conserver cette gestion de redémarrage après un Update de version sans avoir de doublons d'instances...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { if (Program.IfProcessRunning() == false) { //Code autre... Application.Run(new FormMain()); } } /// <summary> /// Détecte si une application est déjà lancée et stoppe le lancement d'une nouvelle /// </summary> /// <returns></returns> public static bool IfProcessRunning() { Process processThis = Process.GetCurrentProcess(); Process[] processesArray = Process.GetProcesses(); foreach (Process process in processesArray) { if (processThis.Id != process.Id) { if (processThis.ProcessName == process.ProcessName) { return true; } } } return false; } }
Merci de votre aide !
Partager