Empêcher l'ouverture du programme si celui-ci est déjà ouvert par un autre utili

Résolu
Theos37 Messages postés 7 Date d'inscription vendredi 8 décembre 2000 Statut Membre Dernière intervention 23 mai 2008 - 14 avril 2008 à 09:50
Theos37 Messages postés 7 Date d'inscription vendredi 8 décembre 2000 Statut Membre Dernière intervention 23 mai 2008 - 14 avril 2008 à 17:53
Bonjour,
Je développe une application VB, ce programme est accessible par plusieurs utilisateurs.
je voudrais empêcher l'ouverture du programme si celui-ci est déjà ouvert par un autre utilisateur sur le réseau.
Comment dois-je m'y prendre?

Theos !

4 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 avril 2008 à 10:31
valable sur le même poste, même...
donc ca ne va pas pour une utilisation pour le réseau.

tu peux passer par des APIs, d'autres choses du genre, ou pour faire un truc hyper simple, te contenter de créer et laisser un fichier ouvert...

Demande a executer la procédure Main au démarrage du projet (a regler dans els propriétés de ce dernier)

dans un module normal (Module1) ajoutes :

Option Explicit

Private moApp As CSingleInstance

Sub Main()
Set moApp = New CSingleInstance
If moApp.IsAlreadyLaunched Then
MsgBox "Application en cours d'utilisation sur un autre poste."
Else
Form1.Show
End If
End Sub


Ajoutes également un module de classe nommé CSingleInstance et colles-y:

Option Explicit

Private mbIsAlreadyLaunched As Boolean
Private miFile As Integer

Public Property Get IsAlreadyLaunched() As Boolean
IsAlreadyLaunched = mbIsAlreadyLaunched
End Property

Private Sub Class_Initialize()
If LenB(Dir$(App.Path & "\a.txt")) Then
On Local Error Resume Next
Kill App.Path & "\a.txt"
If Err Then
mbIsAlreadyLaunched = True
Exit Sub
End If
End If

miFile = FreeFile
Open App.Path & "\a.txt" For Output As miFile
End Sub

Private Sub Class_Terminate()
If Not mbIsAlreadyLaunched Then
Close miFile
Kill App.Path & "\a.txt"
End If
End Sub


et voilà !
le premier arrivé créera un fichier a.txt sur lequel il garde la main.
les suivants viendront, tenteront de supprimer ce fichier.
s'ils y arrivent, c'est que l'appli 1 a crashé...
s'ils n'y parviennent pas, c'est que l'appli 1 tourne toujours
et lorsque l'appli 1 est fermée, le fichier est finalement supprimé...

très basique, pas forcément très orthodoxe , mais efficace et simple a comprendre
3
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
14 avril 2008 à 10:02
Salut,

Regarde cela et regarde dans les sources de Renfield aussi :

Private Sub Form_Load()
If App.PrevInstance Then
   MsgBox "Application déjà lancée !"
   End
End If
End Sub

A+
Exploreur

 Linux a un noyau, Windows un pépin
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
14 avril 2008 à 10:08
Re,

Ah...oui...j'ai oublié de dire, que cette syntaxe est valable que si l'application(exe) et lancée du même répertoire pour tout le monde..

A+
Exploreur

 Linux a un noyau, Windows un pépin
0
Theos37 Messages postés 7 Date d'inscription vendredi 8 décembre 2000 Statut Membre Dernière intervention 23 mai 2008
14 avril 2008 à 17:53
Merci

C TOP !!!

Theos !
0
Rejoignez-nous