OVH Cloud OVH Cloud

remplacer PrevInstance

6 réponses
Avatar
Bul
bonjour à tous,
object.PrevInstance
Renvoie une valeur indiquant si une instance antérieure d'une
application est déjà en cours d'exécution.
comment feriez-vous cela sans utiliser PrevInstance ?
merci d'avance.

6 réponses

Avatar
François Picalausa
Hello,

Sans utiliser celà, on peut employer une entrée de la base de registre ou un
fichier...
MAIS ce n'est pas une méthode appropriée bien qu'elle soit facile et il faut
gérer le cas ou l'appli planterait sans effacer l'entrée...
On peut aussi énumérer les process comme dans:
http://support.microsoft.com/default.aspx?kbid2986
MAIS si l'exe est renommé, on ne pourra pas le retrouver (à moins de lire
l'exe, de générer et comparer un hash, ce qui prendrait beaucoup de temps de
traitement).
Reste la solution plus appropriée du mutex ou du pipê, si l'application doit
communiquer.
je te conseille à ce sujet le post de Zoury:
http://groups.google.com/groups?selm=eq%24UQEwTEHA.3332%40TK2MSFTNGP12.phx.gbl

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Bul" a écrit dans le message de
news:%
bonjour à tous,
object.PrevInstance
Renvoie une valeur indiquant si une instance antérieure d'une
application est déjà en cours d'exécution.
comment feriez-vous cela sans utiliser PrevInstance ?
merci d'avance.


Avatar
Bul
merci à vous,
je regarde donc mutex et si j'ai
des soucis je reviens vous voir.
@+
Avatar
ng
Salut,

En créant un mutex :

http://groups.google.fr/groups?num0&hl=fr&lr=&ie=UTF-8&q=CreateMutex+group%3A*vb*

http://groups.google.fr/groups?num0&hl=fr&lr=&ie=UTF-8&q=CreateMutex+group%3A*fr.vb*

Cf APIs CreateMutex() et ReleaseMutex().

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



Bul a écrit :

bonjour à tous,
object.PrevInstance
Renvoie une valeur indiquant si une instance antérieure d'une
application est déjà en cours d'exécution.
comment feriez-vous cela sans utiliser PrevInstance ?
merci d'avance.


Avatar
Bul
grâce à vos conseils :
Option Explicit
Private Declare Function CreateMutex _
Lib "kernel32" Alias "CreateMutexA" _
(ByVal lpMutexAttributes As Long, _
ByVal bInitialOwner As Long, _
ByVal lpName As String) As Long
Private Sub Form_Load()
Dim retour As Long
retour = CreateMutex(0, 1, VB.App.EXEName)
MsgBox "LastDllError : " & Err.LastDllError
End Sub
encore une question :
peut-on tester autre chose que Err.LastDllError ?
[ GetLastError() lui retourne 0 ]
"remerci" d'avance.
Avatar
François Picalausa
Hello,

Err.LastDllError correspond à GetLastError.
En fait, quand VB appelle des API, il peut effectuer quelques appels
intermédiaires qui seront (normalement) sans erreur. D'où le zéro.
Donc, pour récupérer la "véritable" valeur, il faut tester Err.LastDllError.

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Bul" a écrit dans le message de
news:
grâce à vos conseils :
Option Explicit
Private Declare Function CreateMutex _
Lib "kernel32" Alias "CreateMutexA" _
(ByVal lpMutexAttributes As Long, _
ByVal bInitialOwner As Long, _
ByVal lpName As String) As Long
Private Sub Form_Load()
Dim retour As Long
retour = CreateMutex(0, 1, VB.App.EXEName)
MsgBox "LastDllError : " & Err.LastDllError
End Sub
encore une question :
peut-on tester autre chose que Err.LastDllError ?
[ GetLastError() lui retourne 0 ]
"remerci" d'avance.


Avatar
Bul
tout est clair et vrai
(j'ai pu vérifier avec d'autres langages)
merci beaucoup donc.