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

Signaler
Messages postés
7
Date d'inscription
vendredi 8 décembre 2000
Statut
Membre
Dernière intervention
23 mai 2008
-
Messages postés
7
Date d'inscription
vendredi 8 décembre 2000
Statut
Membre
Dernière intervention
23 mai 2008
-
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

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
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
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
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
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
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
Messages postés
7
Date d'inscription
vendredi 8 décembre 2000
Statut
Membre
Dernière intervention
23 mai 2008

Merci

C TOP !!!

Theos !