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 :

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();
 
        }
Donc ceci marchait très bien.
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 :

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;
 
 
        }
 
    }
En bref, comment conserver cette gestion de redémarrage après un Update de version sans avoir de doublons d'instances...

Merci de votre aide !