IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

SID et Application


Sujet :

VBScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut SID et Application
    Bonjour,

    Je cherche a lancer une application via un script VBS. Jusque la pas de probleme.

    En revanche je souhaite que cette application ne puisse etre lancer qu'une seule fois pour un utilisateur donné.

    Je cherche donc un script qui soit capable de tester si un process s'execute déjà pour le SID qui cherche à lancer l'application.

    Quelqu'un aurait il quelque chose de ce genre en stock ?

    Cordialement

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    En lançant toi même l'application (via le script je veut dire) tu peux recup son PID.
    Du moins si tu lances l'appli à l'aide de Win32_Process comme ici.

    Ensuite à l'aide de cette objet tu peux vérifier :
    1. Que l'appli tourne toujours (au cas où l'appli ne peut être fermer qu'à l'aide d'un autre script, empêchant les kill)
    2. Avoir toutes les infos sur le process et vérifier qu'un autre process n'a pas les mêmes infos


    Bien sur pour faire la vérif en boucle tu peux faire un while(true) avec dans la boucle un sleep de 500 ms pour que le script ne prenne pas 100% du CPU.
    Bien sur les lignes de vérification sont dans la boucle.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Merci - Mais probleme plus complexe finalement
    Bonjour,

    Merci pour votre réponse ... j'ai utilisé le script indiqué comme base pour le mien et cela fonctionne plutot bien.

    Je me suis cependant aperçu que cela ne marchait pas dans tout les cas de figure. Je m'explique :

    Pourquoi l'application ne doit etre lancé qu'une seule fois ?

    Car elle utilise une base qui est mappée dans un lecteur réseau. Cette base ne gere pas du tout les acces concurrents et lorsqu'un meme utilisateur lance l'application 2 fois, la base etant vérrouillée en lecture seule, cela genere des messages d'erreurs. En vérifiant l'existence d'un process associé au SID je pensais avoir résolu mon probleme.

    Or, et je n'y avait pas pensé, cette application est utilisée, pour partie, via TSE. Elle est donc susceptible de s'executer sur différents serveurs TSE de la ferme.

    La base de donnée reste quand à elle la meme pour l'utilisateur et ce quelque soit le serveur ou s'execute le logiciel.

    Je me retrouve donc avec deux process de l'appli sur deux serveur différents mais attaquant la meme base de donnée --- > re-blocage.

    J'en conclu donc qu'il faudrait plutot tester si le fichier de base de donnée est en cours d'accès ou non.

    J'ai parcouru le forum est différents sites :

    http://www.microsoft.com/technet/scriptcenter/guide
    http://www.activexperts.com/activmon...ement/scripts/

    Et d'autres mais je n'ai rien trouver concernant ce type de test.

    Auriez vous un lien ou une piste de recherche ?

    Cordialement

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    J'en conclu donc qu'il faudrait plutot tester si le fichier de base de donnée est en cours d'accès ou non
    Je n'ai jamais fait cela mais peut être qu'ainsi c possible :
    1. Tenter d'ouvrir le fichier en ecriture
    2. Mettre On Error Resume Next dans le script
    3. Tester la valeur de l'objet Err, et si elle est différente de 0, voir egal à une valeur précise, la remettre à zéro et en conclure que le fichier est déjà ouvert par une autre application.


    Bon je ne suis pas sur que tu n'es pas d'autre contrainte qui t'emêcherais de faire ainsi et que je n'ai pas pris en compte.
    Ce que tu veux faire est assez difficille car tu souhaites gérer quelque chose qui aurait dut être gérer par l'appli elle-même. Mais bon je suppose que tu n'as pas la main sur l'application.

    Après si cela ne suffit pas tu peux tenter de faire une application P2P à installer sur chaque serveur qui gère le lancement de l'application se connectant à la BDD. De cette manière, les noeud communiquant ensemble, tu pourrais savoir si l'application a déjà été lancé par un des noeuds. Mais là à mon avis faudra changer de langage.

    Ou en plus simple, ton script actuelle contact un serveur avant de lancer l'application pour savoir s'il a le droit. Si oui alors il dit qu'il la lance et il contactera de nouveau le serveur lorsqu'il l'a fermera. Bref le serveur ne ferais que se souvenir si l'appli a déjà été lancé sur un serveur ou non, et les scripts récupérerais cette info et la mettrais à jour.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  5. #5
    Membre averti
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 341
    Points
    341
    Par défaut
    Salut,

    un lien sur les fichiers ouverts distants (voir tout en bas le post de RobSampson)

    http://www.experts-exchange.com/Prog..._23190324.html

    Sinon, une solution plus simple (peut etre moins fiable aussi) serait de tester l'existance d'un fichier tag qui serait sur le même serveur que ta base, si le fichier existe déjà c'est qu'un autre script est en cours de travail, sinon, on crée le fichier tag, on execute le script, puis on supprime le tag en fin de script pour laisser la place disponible pour au autre script...

    A++
    Plus tu pédales moins vite, moins t'avances plus vite.

Discussions similaires

  1. executer une application a distance : Sockets ? RPC ? CORBA?
    Par a_hic dans le forum Développement
    Réponses: 5
    Dernier message: 30/05/2006, 13h02
  2. Accès à une application ouverte (OLE Automation ?)
    Par PascalB dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/06/2002, 14h39
  3. Réponses: 1
    Dernier message: 13/05/2002, 09h19
  4. [Kylix] Execution d'une application hors de l'edi
    Par Sadam Sivaller dans le forum EDI
    Réponses: 1
    Dernier message: 20/04/2002, 23h22
  5. Réponses: 2
    Dernier message: 15/04/2002, 12h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo