Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Savoir si une application est en fonction sur un réseau.
Message
 
 
To
09/12/2003 04:16:36
General information
Forum:
Visual FoxPro
Category:
Troubleshooting
Miscellaneous
Thread ID:
00856674
Message ID:
00858642
Views:
21
Bonjour lionel,

Merci pour les conseils.
On a adopté une solution "plus" simple qui à l'air de fonctionner ( qq jours).
*-- L'application est elle utilisée par un autre utilisateur ?

*-- IsAppRunning. 12/2003 MILCENT bernhart
*-- D'après une idée originale du NG fr + Franck 7/12/2003.
*-- This est un container application représenté par la variable publique goapp.
*-- THIS.cdefaultdirectory = LocalIsation du DBC et des tables.
*-- THIS.cfcreateip_log = Fichier texte nommé par l 'IP du poste lancant l'application + ext .log
*-- THIS.nfcreateip_log = Affecte un numéro de descripteur de fichier ( THIS.cfcreateip_log )
*--		à une variable mémoire que vous pouvez utiliser pour accéder au fichier avec
*--		d'autres fonctions fichier de bas niveau.

THIS.nfcreateip_log = FCREATE( THIS.cdefaultdirectory + THIS.cfcreateip_log )

LOCAL cFile,;
  cViP,;
  oIPSocket,;
  lnselect,;
  lnretval,;
  gnFichierErreur

lnselect = SELECT( 0 )

*-- Récupérer l'adresse IP de la machine.
*-- CreateObject( "MSWinsock.Winsock.1" ) && Impossible car erreur 1426 licence non autorisée.
*-- IL faut placer l'activex sur un container .
oIPSocket = CREATEOBJECT("Winsock")
*oIPSocket = CREATEOBJECT("MSWinsock.Winsock")
lnretval = .T.

IF VARTYPE( oIPSocket ) = 'O'
  cViP = oIPSocket.olecontrol1.OBJECT.localip
ELSE
  cViP = "999999999999"
  =Errormsg("Pas possible de trouver l'IP de la machine ...")
ENDIF

*-- Fichier user.dbf ( Table ind.) comprenant l'IP de toutes les machines suceptibles
*-- d'avoir accès à l'application.
cFile = ADDBS( ALLTRIM( THIS.cdefaultdirectory ) ) + 'cUser.dbf'

IF !FILE( THIS.cdefaultdirectory  + 'cUser.dbf' )
  CREATE TABLE ( cFile ) FREE ( cIP C(20) , dDebut T(12) , dFin T(8) )
  INDEX ON cIP TAG cViP
ELSE
  THIS.USE( 'cUser.dbf' , THIS.cdefaultdirectory , .T. )
ENDIF

IF !SEEK(  cViP ,  "cUser" , "cViP" )
  INSERT INTO cUser ( cIP ) VALUES  ( cViP )
ENDIF

*DO ZZ

REPLACE dDebut WITH DATETIME() IN cUser && petit auditrail.
REPLACE dFin WITH {  /  /    } IN cUser

SELECT cUser
*-- On passe en revue tous les postes utilisateurs avec leur IP.
*-- Comme une routine vérifie au préalable si l'application n'est pas lancée
*-- 2 fois du même poste , on a pas à vérifier si un poste a créé ce fichier.
SCAN ALL

  cFile = ADDBS( ALLTRIM( THIS.cdefaultdirectory ) ) + ALLTRIM( cUser.cIP )  + '.log'
  *-- Le fichier  XXX.XXX.XXX.XXX.log  existe t'il ? ( les zéros sont cachés).
  *-- A noter que ce fichier est supprimé si la sortie s'est bien déroulée.
  *-- cela permet entr'autres de visualiser sur l'explorateur windows les
  *-- postes qui sont connectés sur les données.
  IF FILE( cFile )

    *--  Un utilisateur est il connecté ?
    gnFichierErreur = FOPEN(  cFile  )

    *-- FOPEN( ) renvoie la valeur –1 si le fichier ou le port ne peut pas être ouvert.
    IF  gnFichierErreur = -1
      lnretval = .F.

      WAIT WINDOW NOWAIT ;
        "Application en cours d'utilisation par un autre poste Ip = " + cUser.cIP
      EXIT

    ELSE
      =FCLOSE(   gnFichierErreur  ) &&  Bug 12/2003
    ENDIF && gnFichierErreur = -1

  ENDIF &&  FILE( cFile )

ENDSCAN

THIS.cfcreateip_log = ALLTRIM( cViP )  + '.log'
THIS.nfcreateip_log = FCREATE( THIS.cdefaultdirectory + THIS.cfcreateip_log )


SELECT ( lnselect )

RETURN  lnretval
Previous
Reply
Map
View

Click here to load this message in the networking platform