Comment empêcher qu'une appli soit lancée deux fois ?
4 réponses
Bull
Bonjour,
J'ai créé une appli windows en VB.net. Mon problème est qu'il est possible
après installation, de la lancer autant de fois que l'on veut.
Comment fait-on pour qu'il ne soit possible de la lancer qu'une fois ?
J'ai eu des échos sur l'utilisation de WMI afin de lister les processus mais
je ne sais pas comment l'utiliser et est-ce vraiment la meilleure solution ?
J'ai créé une appli windows en VB.net. Mon problème est qu'il est possible après installation, de la lancer autant de fois que l'on veut.
Comment fait-on pour qu'il ne soit possible de la lancer qu'une fois ?
J'ai eu des échos sur l'utilisation de WMI afin de lister les processus
mais
je ne sais pas comment l'utiliser et est-ce vraiment la meilleure solution
?
Merci Bull
Patrick Philippot
Bull wrote:
J'ai eu des échos sur l'utilisation de WMI afin de lister les processus mais je ne sais pas comment l'utiliser et est-ce vraiment la meilleure solution ?
WMI c'et très bien mais ça ne va pas fonctionner partout et c'est un peu lourd. La solution la plus fréquemment adoptée est l'utilisation d'un mutex.
if Not OpenMutex(...., <nom_de_mutex_unique>) then CreateMutex(..., <nom_de_mutex_unique>) else Exit
En clair, l'application essaie d'ouvrir un mutex ayant un nom unique à l'application. Si elle réussit, c'est que le mutex existe déjà (donc qu'une instance de l'application est déjà en train de tourner puique le mutex a été créé). Dans ce cas, elle se termine. Sinon, elle crée le mutex et continue son boulot normalement.
-- Patrick Philippot - Microsoft MVP [.Net] MainSoft Consulting Services www.mainsoft.fr
Bull wrote:
J'ai eu des échos sur l'utilisation de WMI afin de lister les
processus mais je ne sais pas comment l'utiliser et est-ce vraiment
la meilleure solution ?
WMI c'et très bien mais ça ne va pas fonctionner partout et c'est un peu
lourd. La solution la plus fréquemment adoptée est l'utilisation d'un
mutex.
if Not OpenMutex(...., <nom_de_mutex_unique>) then
CreateMutex(..., <nom_de_mutex_unique>)
else
Exit
En clair, l'application essaie d'ouvrir un mutex ayant un nom unique à
l'application. Si elle réussit, c'est que le mutex existe déjà (donc
qu'une instance de l'application est déjà en train de tourner puique le
mutex a été créé). Dans ce cas, elle se termine. Sinon, elle crée le
mutex et continue son boulot normalement.
--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.fr
J'ai eu des échos sur l'utilisation de WMI afin de lister les processus mais je ne sais pas comment l'utiliser et est-ce vraiment la meilleure solution ?
WMI c'et très bien mais ça ne va pas fonctionner partout et c'est un peu lourd. La solution la plus fréquemment adoptée est l'utilisation d'un mutex.
if Not OpenMutex(...., <nom_de_mutex_unique>) then CreateMutex(..., <nom_de_mutex_unique>) else Exit
En clair, l'application essaie d'ouvrir un mutex ayant un nom unique à l'application. Si elle réussit, c'est que le mutex existe déjà (donc qu'une instance de l'application est déjà en train de tourner puique le mutex a été créé). Dans ce cas, elle se termine. Sinon, elle crée le mutex et continue son boulot normalement.
-- Patrick Philippot - Microsoft MVP [.Net] MainSoft Consulting Services www.mainsoft.fr
Laurent B
Salut, ça aussi ça tourne :
If UBound(Diagnostics.Process.GetProcessesByName ("Nom_Appli_à_Tester")) > 0 Then End End If
J'ai créé une appli windows en VB.net. Mon problème est
qu'il est possible
après installation, de la lancer autant de fois que l'on
veut.
Comment fait-on pour qu'il ne soit possible de la lancer
qu'une fois ?
J'ai eu des échos sur l'utilisation de WMI afin de
lister les processus mais
je ne sais pas comment l'utiliser et est-ce vraiment la
meilleure solution ?
Merci Bull
.
Bull
Bonjour et merci pour vos réponses. En fait j'ai trouvé encore une autre solution :
a.. Public Sub ProcessExist() Dim Process As New ManagementObjectSearcher("SELECT * FROM Win32_Process") Dim info As ManagementObject Dim stock As String Dim vrs As Integer For Each info In Process.Get stock = info("Caption").ToString() If stock = "MonAppli.exe" Then vrs = vrs + 1 If vrs > 1 Then MsgBox("Appli deja lancée") End End If End If Next End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ProcessExist() End Sub End Class
J'ai testé, ça marche nickel :) Merci encore @+ Bull
Bonjour et merci pour vos réponses. En fait j'ai trouvé encore une autre
solution :
a.. Public Sub ProcessExist()
Dim Process As New ManagementObjectSearcher("SELECT * FROM Win32_Process")
Dim info As ManagementObject
Dim stock As String
Dim vrs As Integer
For Each info In Process.Get
stock = info("Caption").ToString()
If stock = "MonAppli.exe" Then
vrs = vrs + 1
If vrs > 1 Then
MsgBox("Appli deja lancée")
End
End If
End If
Next
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
ProcessExist()
End Sub
End Class
J'ai testé, ça marche nickel :)
Merci encore
@+
Bull
Bonjour et merci pour vos réponses. En fait j'ai trouvé encore une autre solution :
a.. Public Sub ProcessExist() Dim Process As New ManagementObjectSearcher("SELECT * FROM Win32_Process") Dim info As ManagementObject Dim stock As String Dim vrs As Integer For Each info In Process.Get stock = info("Caption").ToString() If stock = "MonAppli.exe" Then vrs = vrs + 1 If vrs > 1 Then MsgBox("Appli deja lancée") End End If End If Next End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ProcessExist() End Sub End Class
J'ai testé, ça marche nickel :) Merci encore @+ Bull