Suite à 1 post existant pour controler si 1 progamme tourne déjà, la
solution du mutex a été apportée.
J'ai essayé ceci (Chargement_en_cours est le formulaire de démarrage de
l'application) :
Public Class Chargement_en_cours
Inherits System.Windows.Forms.Form
Private Sub Chargement_en_cours_Load(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MyBase.Load
'ok = vrai lors du 1er lancement de l'application
'ok = faux si l'application est déjà lancée
Dim ok As Boolean
'crée un mutex unique nommé MonMutexUnique
Dim mut As New System.Threading.Mutex(True, "MonMutexUnique", ok)
If Not ok Then
'L'application a déjà été lancée, fin du programme de la 2e application
End
End If
End Sub
End Class
J'ai fait 1 test en mode débug, en mettant 1 point d'arrêt sur la ligne :
If Not ok Then
L'espion me donne bien la valeur Vrai.
Je remonte alors la ligne d'exécution d'un cran en la pointant sur :
Dim mut As New System.Threading.Mutex(True, "MonMutexUnique", ok)
Et je fait F11 (mode Pas à pas) 1 fois.
L'espion me donne bien maintenant la valeur Faux car mon mutex existe déjà.
Cela semble fonctionner normalement en mode débug, j'essaye maintenant de
compiler.
Après avoir compilé en mode release, je ferme VB .Net pour tester.
Je lance mon programme WindowsApplication1.exe, mon formulaire apparaît.
Je relance de nouveau WindowsApplication1.exe, mon formulaire réapparaît une
deuxième fois au lieu de se fermer.
J'ai également essayé :
Dim mut As New System.Threading.Mutex(False, "MonMutexUnique", ok)
Mais le résultat reste le même, cela fonctionne en debug dans VB, mais ne
fonctionne pas en release en exe.
If UBound(Diagnostics.Process.GetProcessesByName ("Nom_EXE_à_Tester")) > 0 Then End End If
A inserer dans l'évenement Load
A ++
//////////////////////////////////////////////
-----Message d'origine----- Bonjour,
Suite à 1 post existant pour controler si 1 progamme
tourne déjà, la
solution du mutex a été apportée. J'ai essayé ceci (Chargement_en_cours est le formulaire
de démarrage de
l'application) :
Public Class Chargement_en_cours
Inherits System.Windows.Forms.Form
Private Sub Chargement_en_cours_Load(ByVal sender As
System.Object, ByVal e
As System.EventArgs) Handles MyBase.Load
'ok = vrai lors du 1er lancement de l'application
'ok = faux si l'application est déjà lancée
Dim ok As Boolean
'crée un mutex unique nommé MonMutexUnique
Dim mut As New System.Threading.Mutex
(True, "MonMutexUnique", ok)
If Not ok Then
'L'application a déjà été lancée, fin du programme de la
2e application
End
End If
End Sub
End Class
J'ai fait 1 test en mode débug, en mettant 1 point
d'arrêt sur la ligne :
If Not ok Then
L'espion me donne bien la valeur Vrai. Je remonte alors la ligne d'exécution d'un cran en la
pointant sur :
Dim mut As New System.Threading.Mutex
(True, "MonMutexUnique", ok)
Et je fait F11 (mode Pas à pas) 1 fois.
L'espion me donne bien maintenant la valeur Faux car mon
mutex existe déjà.
Cela semble fonctionner normalement en mode débug,
j'essaye maintenant de
compiler.
Après avoir compilé en mode release, je ferme VB .Net
pour tester.
Je lance mon programme WindowsApplication1.exe, mon
formulaire apparaît.
Je relance de nouveau WindowsApplication1.exe, mon
formulaire réapparaît une
deuxième fois au lieu de se fermer. J'ai également essayé : Dim mut As New System.Threading.Mutex
(False, "MonMutexUnique", ok)
Mais le résultat reste le même, cela fonctionne en debug
dans VB, mais ne
fonctionne pas en release en exe.
Savez-vous où se trouve mon problème ?
Merci d'avance pour votre aide.
-- Cordialement,
Stéphane L
.
Bismark Prods
Bonsoir,
"Stéphane L." a écrit dans le message de news:
Après avoir compilé en mode release, je ferme VB .Net pour tester. Je lance mon programme WindowsApplication1.exe, mon formulaire apparaît. Je relance de nouveau WindowsApplication1.exe, mon formulaire réapparaît
une
deuxième fois au lieu de se fermer.
Il me semble que si vous lancez 2 applications WindowsApplication1.exe ... elles se trouveront dans 2 process différents, le mutex ne peut donc pas être utile dans ce cas précis. Le mutex a accès au thread qui se trouve dans le meme pool si j'ai pas trop mal compris l'histoire des threads .. lol
-- Cordialement,
Stéphane L
Bismark
Bonsoir,
"Stéphane L." <no@spam.fr> a écrit dans le message de
news:eUQvx5SWEHA.3012@tk2msftngp13.phx.gbl...
Après avoir compilé en mode release, je ferme VB .Net pour tester.
Je lance mon programme WindowsApplication1.exe, mon formulaire apparaît.
Je relance de nouveau WindowsApplication1.exe, mon formulaire réapparaît
une
deuxième fois au lieu de se fermer.
Il me semble que si vous lancez 2 applications WindowsApplication1.exe ...
elles se trouveront dans 2 process différents, le mutex ne peut donc pas
être utile dans ce cas précis. Le mutex a accès au thread qui se trouve dans
le meme pool si j'ai pas trop mal compris l'histoire des threads .. lol
Après avoir compilé en mode release, je ferme VB .Net pour tester. Je lance mon programme WindowsApplication1.exe, mon formulaire apparaît. Je relance de nouveau WindowsApplication1.exe, mon formulaire réapparaît
une
deuxième fois au lieu de se fermer.
Il me semble que si vous lancez 2 applications WindowsApplication1.exe ... elles se trouveront dans 2 process différents, le mutex ne peut donc pas être utile dans ce cas précis. Le mutex a accès au thread qui se trouve dans le meme pool si j'ai pas trop mal compris l'histoire des threads .. lol
-- Cordialement,
Stéphane L
Bismark
Zazar
Bonjour,
Suite à 1 post existant pour controler si 1 progamme tourne déjà, la solution du mutex a été apportée.
C'est effectivement la meilleure méthode.
(...)
Dim mut As New System.Threading.Mutex(True, "MonMutexUnique", ok)
(...)
Un mutex est un moyen de synchroniser plusieurs tâches effectuées simultanément. On peut créer des mutex pour la synchronisation entre processus ou bien entre threads d'un même processus par exemple. La méthode que vous utilisez correspond au 2ième cas et donc un mutex par processus est créé. Cependant le cas qui vous intéresse est l'utilisation d'un mutex pour tous les processus. Je ne sais pas si il existe des classes/méthodes .NET pour le faire. Si vous n'en trouvez, vous devrez utiliser l'API Win32 CreateMutex : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createmutex.asp.
-- Zazar
Bonjour,
Suite à 1 post existant pour controler si 1 progamme tourne déjà, la
solution du mutex a été apportée.
C'est effectivement la meilleure méthode.
(...)
Dim mut As New System.Threading.Mutex(True, "MonMutexUnique", ok)
(...)
Un mutex est un moyen de synchroniser plusieurs tâches effectuées
simultanément. On peut créer des mutex pour la synchronisation entre
processus ou bien entre threads d'un même processus par exemple. La méthode
que vous utilisez correspond au 2ième cas et donc un mutex par processus est
créé. Cependant le cas qui vous intéresse est l'utilisation d'un mutex pour
tous les processus. Je ne sais pas si il existe des classes/méthodes .NET
pour le faire. Si vous n'en trouvez, vous devrez utiliser l'API Win32
CreateMutex :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createmutex.asp.
Suite à 1 post existant pour controler si 1 progamme tourne déjà, la solution du mutex a été apportée.
C'est effectivement la meilleure méthode.
(...)
Dim mut As New System.Threading.Mutex(True, "MonMutexUnique", ok)
(...)
Un mutex est un moyen de synchroniser plusieurs tâches effectuées simultanément. On peut créer des mutex pour la synchronisation entre processus ou bien entre threads d'un même processus par exemple. La méthode que vous utilisez correspond au 2ième cas et donc un mutex par processus est créé. Cependant le cas qui vous intéresse est l'utilisation d'un mutex pour tous les processus. Je ne sais pas si il existe des classes/méthodes .NET pour le faire. Si vous n'en trouvez, vous devrez utiliser l'API Win32 CreateMutex : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createmutex.asp.
-- Zazar
Stéphane L.
J'ai donc essayé ceci à la place de mon mutex (que j'ai enlevé) dans mon form de démarrage dans le load
If UBound(Diagnostics.Process.GetProcessesByName("WindowsApplication1.exe"))
0 Then
End End If
Je compile en mode release Je lance WindowsApplication1.exe, le processus se lance normalement et la fenêtre apparaît. Je relance WindowsApplication1.exe, le processus se relance de nouveau :-/
"Laurent B" a écrit dans le message de news:207c801c45945$34aee870$ Salut,
Autre possibilité que Mutex :
If UBound(Diagnostics.Process.GetProcessesByName ("Nom_EXE_à_Tester")) > 0 Then End End If
A inserer dans l'évenement Load
A ++
//////////////////////////////////////////////
-----Message d'origine----- Bonjour,
Suite à 1 post existant pour controler si 1 progamme
tourne déjà, la
solution du mutex a été apportée. J'ai essayé ceci (Chargement_en_cours est le formulaire
de démarrage de
l'application) :
Public Class Chargement_en_cours
Inherits System.Windows.Forms.Form
Private Sub Chargement_en_cours_Load(ByVal sender As
System.Object, ByVal e
As System.EventArgs) Handles MyBase.Load
'ok = vrai lors du 1er lancement de l'application
'ok = faux si l'application est déjà lancée
Dim ok As Boolean
'crée un mutex unique nommé MonMutexUnique
Dim mut As New System.Threading.Mutex
(True, "MonMutexUnique", ok)
If Not ok Then
'L'application a déjà été lancée, fin du programme de la
2e application
End
End If
End Sub
End Class
J'ai fait 1 test en mode débug, en mettant 1 point
d'arrêt sur la ligne :
If Not ok Then
L'espion me donne bien la valeur Vrai. Je remonte alors la ligne d'exécution d'un cran en la
pointant sur :
Dim mut As New System.Threading.Mutex
(True, "MonMutexUnique", ok)
Et je fait F11 (mode Pas à pas) 1 fois.
L'espion me donne bien maintenant la valeur Faux car mon
mutex existe déjà.
Cela semble fonctionner normalement en mode débug,
j'essaye maintenant de
compiler.
Après avoir compilé en mode release, je ferme VB .Net
pour tester.
Je lance mon programme WindowsApplication1.exe, mon
formulaire apparaît.
Je relance de nouveau WindowsApplication1.exe, mon
formulaire réapparaît une
deuxième fois au lieu de se fermer. J'ai également essayé : Dim mut As New System.Threading.Mutex
(False, "MonMutexUnique", ok)
Mais le résultat reste le même, cela fonctionne en debug
dans VB, mais ne
fonctionne pas en release en exe.
Savez-vous où se trouve mon problème ?
Merci d'avance pour votre aide.
-- Cordialement,
Stéphane L
.
J'ai donc essayé ceci à la place de mon mutex (que j'ai enlevé) dans mon
form de démarrage dans le load
If UBound(Diagnostics.Process.GetProcessesByName("WindowsApplication1.exe"))
0 Then
End
End If
Je compile en mode release
Je lance WindowsApplication1.exe, le processus se lance normalement et la
fenêtre apparaît.
Je relance WindowsApplication1.exe, le processus se relance de nouveau :-/
"Laurent B" <anonymous@discussions.microsoft.com> a écrit dans le message de
news:207c801c45945$34aee870$a101280a@phx.gbl...
Salut,
Autre possibilité que Mutex :
If UBound(Diagnostics.Process.GetProcessesByName
("Nom_EXE_à_Tester")) > 0 Then
End
End If
A inserer dans l'évenement Load
A ++
//////////////////////////////////////////////
-----Message d'origine-----
Bonjour,
Suite à 1 post existant pour controler si 1 progamme
tourne déjà, la
solution du mutex a été apportée.
J'ai essayé ceci (Chargement_en_cours est le formulaire
de démarrage de
l'application) :
Public Class Chargement_en_cours
Inherits System.Windows.Forms.Form
Private Sub Chargement_en_cours_Load(ByVal sender As
System.Object, ByVal e
As System.EventArgs) Handles MyBase.Load
'ok = vrai lors du 1er lancement de l'application
'ok = faux si l'application est déjà lancée
Dim ok As Boolean
'crée un mutex unique nommé MonMutexUnique
Dim mut As New System.Threading.Mutex
(True, "MonMutexUnique", ok)
If Not ok Then
'L'application a déjà été lancée, fin du programme de la
2e application
End
End If
End Sub
End Class
J'ai fait 1 test en mode débug, en mettant 1 point
d'arrêt sur la ligne :
If Not ok Then
L'espion me donne bien la valeur Vrai.
Je remonte alors la ligne d'exécution d'un cran en la
pointant sur :
Dim mut As New System.Threading.Mutex
(True, "MonMutexUnique", ok)
Et je fait F11 (mode Pas à pas) 1 fois.
L'espion me donne bien maintenant la valeur Faux car mon
mutex existe déjà.
Cela semble fonctionner normalement en mode débug,
j'essaye maintenant de
compiler.
Après avoir compilé en mode release, je ferme VB .Net
pour tester.
Je lance mon programme WindowsApplication1.exe, mon
formulaire apparaît.
Je relance de nouveau WindowsApplication1.exe, mon
formulaire réapparaît une
deuxième fois au lieu de se fermer.
J'ai également essayé :
Dim mut As New System.Threading.Mutex
(False, "MonMutexUnique", ok)
Mais le résultat reste le même, cela fonctionne en debug
J'ai donc essayé ceci à la place de mon mutex (que j'ai enlevé) dans mon form de démarrage dans le load
If UBound(Diagnostics.Process.GetProcessesByName("WindowsApplication1.exe"))
0 Then
End End If
Je compile en mode release Je lance WindowsApplication1.exe, le processus se lance normalement et la fenêtre apparaît. Je relance WindowsApplication1.exe, le processus se relance de nouveau :-/
"Laurent B" a écrit dans le message de news:207c801c45945$34aee870$ Salut,
Autre possibilité que Mutex :
If UBound(Diagnostics.Process.GetProcessesByName ("Nom_EXE_à_Tester")) > 0 Then End End If
A inserer dans l'évenement Load
A ++
//////////////////////////////////////////////
-----Message d'origine----- Bonjour,
Suite à 1 post existant pour controler si 1 progamme
tourne déjà, la
solution du mutex a été apportée. J'ai essayé ceci (Chargement_en_cours est le formulaire
de démarrage de
l'application) :
Public Class Chargement_en_cours
Inherits System.Windows.Forms.Form
Private Sub Chargement_en_cours_Load(ByVal sender As
System.Object, ByVal e
As System.EventArgs) Handles MyBase.Load
'ok = vrai lors du 1er lancement de l'application
'ok = faux si l'application est déjà lancée
Dim ok As Boolean
'crée un mutex unique nommé MonMutexUnique
Dim mut As New System.Threading.Mutex
(True, "MonMutexUnique", ok)
If Not ok Then
'L'application a déjà été lancée, fin du programme de la
2e application
End
End If
End Sub
End Class
J'ai fait 1 test en mode débug, en mettant 1 point
d'arrêt sur la ligne :
If Not ok Then
L'espion me donne bien la valeur Vrai. Je remonte alors la ligne d'exécution d'un cran en la
pointant sur :
Dim mut As New System.Threading.Mutex
(True, "MonMutexUnique", ok)
Et je fait F11 (mode Pas à pas) 1 fois.
L'espion me donne bien maintenant la valeur Faux car mon
mutex existe déjà.
Cela semble fonctionner normalement en mode débug,
j'essaye maintenant de
compiler.
Après avoir compilé en mode release, je ferme VB .Net
pour tester.
Je lance mon programme WindowsApplication1.exe, mon
formulaire apparaît.
Je relance de nouveau WindowsApplication1.exe, mon
formulaire réapparaît une
deuxième fois au lieu de se fermer. J'ai également essayé : Dim mut As New System.Threading.Mutex
(False, "MonMutexUnique", ok)
Mais le résultat reste le même, cela fonctionne en debug
dans VB, mais ne
fonctionne pas en release en exe.
Savez-vous où se trouve mon problème ?
Merci d'avance pour votre aide.
-- Cordialement,
Stéphane L
.
Stéphane L.
Autant pour moi, j'ai fait 1 gaffe...
Il ne faut pas marquer l'extension
Ca marche parfaitement :)
Reste plus qu'à vérifier que le nom du fichier exe que je lance n'ait pas été changé, sinon, ca contourne le shmilblick
Merci Stéphane
"Stéphane L." a écrit dans le message de news:%
J'ai donc essayé ceci à la place de mon mutex (que j'ai enlevé) dans mon form de démarrage dans le load
Je compile en mode release Je lance WindowsApplication1.exe, le processus se lance normalement et la fenêtre apparaît. Je relance WindowsApplication1.exe, le processus se relance de nouveau :-/
"Laurent B" a écrit dans le message
de
news:207c801c45945$34aee870$ Salut,
Autre possibilité que Mutex :
If UBound(Diagnostics.Process.GetProcessesByName ("Nom_EXE_à_Tester")) > 0 Then End End If
A inserer dans l'évenement Load
A ++
////////////////////////////////////////////// >-----Message d'origine----- >Bonjour, > >Suite à 1 post existant pour controler si 1 progamme tourne déjà, la >solution du mutex a été apportée. >J'ai essayé ceci (Chargement_en_cours est le formulaire de démarrage de >l'application) : > >Public Class Chargement_en_cours > >Inherits System.Windows.Forms.Form > >Private Sub Chargement_en_cours_Load(ByVal sender As System.Object, ByVal e >As System.EventArgs) Handles MyBase.Load > >'ok = vrai lors du 1er lancement de l'application > >'ok = faux si l'application est déjà lancée > >Dim ok As Boolean > >'crée un mutex unique nommé MonMutexUnique > >Dim mut As New System.Threading.Mutex (True, "MonMutexUnique", ok) > >If Not ok Then > >'L'application a déjà été lancée, fin du programme de la 2e application > >End > >End If > >End Sub > >End Class > >J'ai fait 1 test en mode débug, en mettant 1 point d'arrêt sur la ligne : >If Not ok Then > >L'espion me donne bien la valeur Vrai. >Je remonte alors la ligne d'exécution d'un cran en la pointant sur : >Dim mut As New System.Threading.Mutex (True, "MonMutexUnique", ok) > >Et je fait F11 (mode Pas à pas) 1 fois. > >L'espion me donne bien maintenant la valeur Faux car mon mutex existe déjà. > >Cela semble fonctionner normalement en mode débug, j'essaye maintenant de >compiler. > >Après avoir compilé en mode release, je ferme VB .Net pour tester. >Je lance mon programme WindowsApplication1.exe, mon formulaire apparaît. >Je relance de nouveau WindowsApplication1.exe, mon formulaire réapparaît une >deuxième fois au lieu de se fermer. >J'ai également essayé : >Dim mut As New System.Threading.Mutex (False, "MonMutexUnique", ok) > >Mais le résultat reste le même, cela fonctionne en debug dans VB, mais ne >fonctionne pas en release en exe. > > >Savez-vous où se trouve mon problème ? > >Merci d'avance pour votre aide. > >-- >Cordialement, > >Stéphane L > > >. >
Autant pour moi, j'ai fait 1 gaffe...
Il ne faut pas marquer l'extension
Ca marche parfaitement :)
Reste plus qu'à vérifier que le nom du fichier exe que je lance n'ait pas
été changé, sinon, ca contourne le shmilblick
Merci
Stéphane
"Stéphane L." <no@spam.fr> a écrit dans le message de
news:%23ubVjJfWEHA.208@TK2MSFTNGP10.phx.gbl...
J'ai donc essayé ceci à la place de mon mutex (que j'ai enlevé) dans mon
form de démarrage dans le load
Je compile en mode release
Je lance WindowsApplication1.exe, le processus se lance normalement et la
fenêtre apparaît.
Je relance WindowsApplication1.exe, le processus se relance de nouveau :-/
"Laurent B" <anonymous@discussions.microsoft.com> a écrit dans le message
If UBound(Diagnostics.Process.GetProcessesByName
("Nom_EXE_à_Tester")) > 0 Then
End
End If
A inserer dans l'évenement Load
A ++
//////////////////////////////////////////////
>-----Message d'origine-----
>Bonjour,
>
>Suite à 1 post existant pour controler si 1 progamme
tourne déjà, la
>solution du mutex a été apportée.
>J'ai essayé ceci (Chargement_en_cours est le formulaire
de démarrage de
>l'application) :
>
>Public Class Chargement_en_cours
>
>Inherits System.Windows.Forms.Form
>
>Private Sub Chargement_en_cours_Load(ByVal sender As
System.Object, ByVal e
>As System.EventArgs) Handles MyBase.Load
>
>'ok = vrai lors du 1er lancement de l'application
>
>'ok = faux si l'application est déjà lancée
>
>Dim ok As Boolean
>
>'crée un mutex unique nommé MonMutexUnique
>
>Dim mut As New System.Threading.Mutex
(True, "MonMutexUnique", ok)
>
>If Not ok Then
>
>'L'application a déjà été lancée, fin du programme de la
2e application
>
>End
>
>End If
>
>End Sub
>
>End Class
>
>J'ai fait 1 test en mode débug, en mettant 1 point
d'arrêt sur la ligne :
>If Not ok Then
>
>L'espion me donne bien la valeur Vrai.
>Je remonte alors la ligne d'exécution d'un cran en la
pointant sur :
>Dim mut As New System.Threading.Mutex
(True, "MonMutexUnique", ok)
>
>Et je fait F11 (mode Pas à pas) 1 fois.
>
>L'espion me donne bien maintenant la valeur Faux car mon
mutex existe déjà.
>
>Cela semble fonctionner normalement en mode débug,
j'essaye maintenant de
>compiler.
>
>Après avoir compilé en mode release, je ferme VB .Net
pour tester.
>Je lance mon programme WindowsApplication1.exe, mon
formulaire apparaît.
>Je relance de nouveau WindowsApplication1.exe, mon
formulaire réapparaît une
>deuxième fois au lieu de se fermer.
>J'ai également essayé :
>Dim mut As New System.Threading.Mutex
(False, "MonMutexUnique", ok)
>
>Mais le résultat reste le même, cela fonctionne en debug
dans VB, mais ne
>fonctionne pas en release en exe.
>
>
>Savez-vous où se trouve mon problème ?
>
>Merci d'avance pour votre aide.
>
>--
>Cordialement,
>
>Stéphane L
>
>
>.
>
Je compile en mode release Je lance WindowsApplication1.exe, le processus se lance normalement et la fenêtre apparaît. Je relance WindowsApplication1.exe, le processus se relance de nouveau :-/
"Laurent B" a écrit dans le message
de
news:207c801c45945$34aee870$ Salut,
Autre possibilité que Mutex :
If UBound(Diagnostics.Process.GetProcessesByName ("Nom_EXE_à_Tester")) > 0 Then End End If
A inserer dans l'évenement Load
A ++
////////////////////////////////////////////// >-----Message d'origine----- >Bonjour, > >Suite à 1 post existant pour controler si 1 progamme tourne déjà, la >solution du mutex a été apportée. >J'ai essayé ceci (Chargement_en_cours est le formulaire de démarrage de >l'application) : > >Public Class Chargement_en_cours > >Inherits System.Windows.Forms.Form > >Private Sub Chargement_en_cours_Load(ByVal sender As System.Object, ByVal e >As System.EventArgs) Handles MyBase.Load > >'ok = vrai lors du 1er lancement de l'application > >'ok = faux si l'application est déjà lancée > >Dim ok As Boolean > >'crée un mutex unique nommé MonMutexUnique > >Dim mut As New System.Threading.Mutex (True, "MonMutexUnique", ok) > >If Not ok Then > >'L'application a déjà été lancée, fin du programme de la 2e application > >End > >End If > >End Sub > >End Class > >J'ai fait 1 test en mode débug, en mettant 1 point d'arrêt sur la ligne : >If Not ok Then > >L'espion me donne bien la valeur Vrai. >Je remonte alors la ligne d'exécution d'un cran en la pointant sur : >Dim mut As New System.Threading.Mutex (True, "MonMutexUnique", ok) > >Et je fait F11 (mode Pas à pas) 1 fois. > >L'espion me donne bien maintenant la valeur Faux car mon mutex existe déjà. > >Cela semble fonctionner normalement en mode débug, j'essaye maintenant de >compiler. > >Après avoir compilé en mode release, je ferme VB .Net pour tester. >Je lance mon programme WindowsApplication1.exe, mon formulaire apparaît. >Je relance de nouveau WindowsApplication1.exe, mon formulaire réapparaît une >deuxième fois au lieu de se fermer. >J'ai également essayé : >Dim mut As New System.Threading.Mutex (False, "MonMutexUnique", ok) > >Mais le résultat reste le même, cela fonctionne en debug dans VB, mais ne >fonctionne pas en release en exe. > > >Savez-vous où se trouve mon problème ? > >Merci d'avance pour votre aide. > >-- >Cordialement, > >Stéphane L > > >. >
Patrick Philippot
Bismark Prods wrote:
Il me semble que si vous lancez 2 applications WindowsApplication1.exe ... elles se trouveront dans 2 process différents, le mutex ne peut donc pas être utile dans ce cas précis. Le mutex a accès au thread qui se trouve dans le meme pool si j'ai pas trop mal compris l'histoire des threads .. lol
Un mutex est global au système. Il peut donc être vu de plusieurs processus différents. C'est justement l'intérêt de cet objet par rapport à une section critique, par exemple.
En fait, je devrais dire un mutex est *par défaut* global à la *session*. Ce qui a une importance fondamentale sous XP quand on utilise le Fast User Switching (plusieurs sessions utilisateur concurrentes). Dans ce cas, pour que le mutex soit vu globalement de toutes les sessions, il faut que son nom soit préfixé avec Global. C'est documenté.
-- Patrick Philippot - Microsoft MVP [.Net] MainSoft Consulting Services www.mainsoft.fr
Bismark Prods wrote:
Il me semble que si vous lancez 2 applications
WindowsApplication1.exe ... elles se trouveront dans 2 process
différents, le mutex ne peut donc pas être utile dans ce cas précis.
Le mutex a accès au thread qui se trouve dans le meme pool si j'ai
pas trop mal compris l'histoire des threads .. lol
Un mutex est global au système. Il peut donc être vu de plusieurs
processus différents. C'est justement l'intérêt de cet objet par rapport
à une section critique, par exemple.
En fait, je devrais dire un mutex est *par défaut* global à la
*session*. Ce qui a une importance fondamentale sous XP quand on utilise
le Fast User Switching (plusieurs sessions utilisateur concurrentes).
Dans ce cas, pour que le mutex soit vu globalement de toutes les
sessions, il faut que son nom soit préfixé avec Global. C'est
documenté.
--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.fr
Il me semble que si vous lancez 2 applications WindowsApplication1.exe ... elles se trouveront dans 2 process différents, le mutex ne peut donc pas être utile dans ce cas précis. Le mutex a accès au thread qui se trouve dans le meme pool si j'ai pas trop mal compris l'histoire des threads .. lol
Un mutex est global au système. Il peut donc être vu de plusieurs processus différents. C'est justement l'intérêt de cet objet par rapport à une section critique, par exemple.
En fait, je devrais dire un mutex est *par défaut* global à la *session*. Ce qui a une importance fondamentale sous XP quand on utilise le Fast User Switching (plusieurs sessions utilisateur concurrentes). Dans ce cas, pour que le mutex soit vu globalement de toutes les sessions, il faut que son nom soit préfixé avec Global. C'est documenté.
-- Patrick Philippot - Microsoft MVP [.Net] MainSoft Consulting Services www.mainsoft.fr