OVH Cloud OVH Cloud

[WD5.5, 8][FSupprime]

4 réponses
Avatar
SebNews
Pour connaître les machines connectées sur la base d'une application Réseau,
nous utilisons la méthode suivante.
- Ouverture du Projet : Création d'un fichier texte sur le répertoire
partagé des données avec le nom de machine et user :

machine=netnommachine()
utilisateur=RéseauUtilisateur()

r_log=fouvre(CheminBase+"\Log\"+utilisateur+".txt",focreation)
si r_log=-1 alors
info("Erreur de Login")
sinon
// on écrit la date et heure de login
rt=fecrit(r_log,dateverschaine(datesys())+rc)
rt=fecrit(r_log,gauche(heureverschaine(heuresys()),5)+rc)
rt=fecrit(r_log,machine) // Nom de l'utilisateur
fin

- Fermeture du Projet :
Destruction du fichier texte

- Pour lister les machines connectées :
o Tentative de destruction de tous les fichiers textes ( en cas de sortie
violente de l'application)
o Ceux que l'on ne peut pas détruire sont donc des machines avec le logiciel
actif.


Cette procédure fonction très bien depuis des années sous 98,Me Wind 200
Pro.
Sous l'explorateur, la tentative de destruction de ce fichier texte génère
une erreur de violation ( normal le fichier est ouvert par un autre poste)


Par contre Sous Windows XP, on peut détruire par l'explorateur le fichier de
log d'une autre machine sans message d'erreur. Le fait de faire F5 (
actualiser) remontre ce fichier texte de LOG.
De plus sous l'application, la procédure de tentative de destruction de ces
fichiers texte ( Fsupprime ) ne fonctionne plus ( renvoie 0 comme si ok pour
la destruction )

Cette procédure nous sert à savoir si des machines sont connéctées avant
synchro des bases. D'ou problèmes..

Avez vous constaté ce phénomène. Et comment y remédier

Sébastien

4 réponses

Avatar
Romain PETIT
SebNews a exprimé avec précision :
Pour connaître les machines connectées sur la base d'une application Réseau,
nous utilisons la méthode suivante.



Bonjour,

r_log=fouvre(CheminBase+"Log"+utilisateur+".txt",focreation)



Essaye plutôt avec foCreation+FoBloqueEcriture (nouveau paramètre en
WD7/8).

De plus sous l'application, la procédure de tentative de destruction de ces
fichiers texte ( Fsupprime ) ne fonctionne plus ( renvoie 0 comme si ok pour
la destruction )



Attention, le résultat de fsupprime en WD7/8 diffère de celui de WD55 :
WD55 : fsupprime renvoie 0 si tout est OK (-1 en cas d'erreur)
WD7/8 : fsupprime renvoie 0 (false) si une erreur est survenue (1
(vrai) si tout est OK)

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
SebNews
Bonjour Romain

Essaye plutôt avec foCreation+FoBloqueEcriture (nouveau paramètre en
WD7/8).


c'est une ancien application sous 5.5B


Attention, le résultat de fsupprime en WD7/8 diffère de celui de WD55 :
WD55 : fsupprime renvoie 0 si tout est OK (-1 en cas d'erreur)
WD7/8 : fsupprime renvoie 0 (false) si une erreur est survenue (1
(vrai) si tout est OK)



Le problème vient ici d'un changement de comportement
selon le système.
Fsupprime me renvoie 0 ( OS XP en WD en 5.5b) alors qu'il ne devrait
pas pouvoir détruire ce fichier ( en cours sur un autre poste)

Mais cela ne vient pas de la fonction Fsupprime.
Depuis un Windows XP, avec l'explorateur, j'arrive à détruire le
fichier texte de LOG créé ( et ouvert ) par un autre poste sur le partage
sans message d'erreur. En faisant un F5, ce fichier texte est de nouveau
présent sous l'explorateur.

Je pense que c'est plutôt du au système

Quelqu'un peut il faire le Test ? ( 5.5 B)
je n'arrive pas à comprendre le phénomène

Merci
Sébastien
Avatar
laurent
bonjour

pour gérer les postes ouverts sur un réseau j'ai utilisé une suggestion
présentée dans une ancienne LST
Elle consiste à ajouter un fichier HF à la base partagée qui contient les
zones suivantes :
NUM_SESSION numéro unique de session
NOM_LOGIN renseigné avec ReseauUtilisateur()
NOM_POSTE renseigné avec le nom de la station (enregistré dans la
base d registes)
NOM_LOGICIEL
et éventuellement DATE et HEURE de connexion

à chaque connexion on essaie de bloquer toutes les fiches du fichier
hnombreessai=1 // fait une seule tentative de verrouillage de fiche
au lieu de 5
si Hlit(fichier_session,hnumenr,hbloqueecriture)
hsupprime(fichier_session) // sortie violente de l'utilisateur
fin

On mémorise dans une variable globale un n° de session unique

puis on renseigne les zones HF et on ajoute une fiche
Hajoute(Fichier_session)
et on bloque la fiche Hlit(fichier_session,hnumenr(),hbloqueecriture)

En fin de programme on relit la fiche avec le n° de session enregistré en
varible globale et on la débloque puis on l'efface

Cette technique permet de savoir combien de gens sont connectés (pour ceux
qui veulent limiter le nombre de connexions simultanées), qui est connecté
et ou ils sont connectés pour éventuellement envoyer un message de "logout"

par ailleurs cela permet de lancer un batch de sauvegarde ou réindexation ou
traitement à risque en s'assurant que personne n'est connecté à la base.
J'ai ajouté une fonction de verrouillage de la base en ajoutant dans un
fichier ini un paramètre VERROU=oui ou non qui autorise ou refuse
l'utilisation du logiciel pendant les batches sensibles.

Cette technique est utilisée depuis la version 4 sous windows 95 et
fonctionne toujours en version 8 sour w95 + w98 + wXP
salutations
Avatar
SebNews
Bonjour,
merci pour cette réponse complète.
En efffet le but est de gérer les sorties violentes du logiciel.

La solution des fichiers texte fonctionne aussi très bien
sauf avec Windows XP.
Si je ne trouve pas la raison, je vais je pense m'inspirer
de cette solution.

Merci
Sébastien