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

API, COM et SDKs Delphi Discussion :

Comment arrêter un composant du service de composants Windows ?


Sujet :

API, COM et SDKs Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Comment arrêter un composant du service de composants Windows ?
    Bonjour,
    Je vais essayer d'âtre clair car c'est un peu compliqué...
    Je développe une application N-Tiers dont la partie serveur se trouve dans une Dll.
    Le client accède aux fonctions de la dll via des interfaces de la bibliothèque de types définies dans le service de composants Windows. (demarrer\panneau de config\outils d'administration\service des composants)
    J'ai donc un composant qui s'active le quand une demande lui est faite. (petit rappel : les composants du service de composant sont en attente d'un message (via COM/COM+) qui à été lancé par un client via les interfaces décrites ci dessus)
    Ce composant (entre autres) accède à une base de données. Lors de la première activation la connexion à la base de données se fait et tout roule.

    Il arrive que la base tombe (exemple la nuit elle est arrêtée pour une sauvegarde) Mon programme lui n'en sait rien... sauf que ses objets (ADO et BDE) sont connectés à une instance de base de donnée qui n'existe plus ! bref ca plante.

    Le seul moyen pour que tout reparte dans l'ordre est de faire un click droit sur mon composant et de faire "arrêter". Lors de la demande suivante, il redémarre, se reconnecte du coup et tout fonctionne.

    Or ce n'est pas jouable en production, il faudrait que quand je me rends compte de la coupure à la base de données j'arrête mon composant pour qu'il refasse ses connections à la demande suivante du poste client.

    Or je n'y arrive pas avec delphi (D6 SP2). Impossible de trouver une fonction qui stoppe un composant du service de composant.
    PS : ce n'est pas un service windows, mais bien un composant du service de composants.

    Quelqu'un a-t-il une solution ??

    Merci bcp.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Malheureusement non, par contre on m'a passé une bonne idée (Merci FredM) : L'utilisation d'un script AutoIt....
    C'est pas super génial mais ca fonctionne !

    Le voici : Changer "NomDeMonComposantCom+" par le nom de ton composant et changer éventuellement les coordonées.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Dim $SelItem
    Dim $Menu
    if NOT WinExists ("Services de composants") then
    	ShellExecute("C:\WINDOWS\system32\Com\comexp.msc")
    Endif 
     
     
     
    WinActivate ("Services de composants")
    WinWaitActive("Services de composants")
    sleep(200)
     
     
    ControlTreeView ("", "", "SysTreeView321", "collapse",  "Racine de la console")
    sleep(100)
     
    ControlTreeView ("", "", "SysTreeView321", "Select",  "Racine de la console|Services de composants")
    ControlTreeView ("", "", "SysTreeView321", "expand",  "Racine de la console|Services de composants")
    sleep(100)
    ControlTreeView ("", "", "SysTreeView321", "Select",  "Racine de la console|Services de composants|Ordinateurs")
    ControlTreeView ("", "", "SysTreeView321", "expand",  "Racine de la console|Services de composants|Ordinateurs")
    sleep(100)
    ControlTreeView ("", "", "SysTreeView321", "Select",  "Racine de la console|Services de composants|Ordinateurs|Poste de travail")
    ControlTreeView ("", "", "SysTreeView321", "expand",  "Racine de la console|Services de composants|Ordinateurs|Poste de travail")
    sleep(100)
    ControlTreeView ("", "", "SysTreeView321", "Select",  "Racine de la console|Services de composants|Ordinateurs|Poste de travail|Applications COM+")
    ControlTreeView ("", "", "SysTreeView321", "expand",  "Racine de la console|Services de composants|Ordinateurs|Poste de travail|Applications COM+")
    sleep(100)
    $SelItem = ControlListView ("", "", "SysListView321", "FindItem", "NomDeMonComposantCom+")
    sleep(200)
    ControlListView ("", "", "SysListView321", "Select", $SelItem)
    sleep(200)
    ControlFocus ( "", "", "SysListView321" )
    sleep(200)
    ControlListView ("", "", "SysListView321","ViewChange", "details")
    sleep(200)
    ControlClick("", "", "SysListView321", "menu", 1, 42, 96)
    send("{DOWN 3}")
    send("{ENTER}")
    WinClose("Services de composants")
    Citation Envoyé par [DreaMs]
    J'ai le même besoin que toi.
    As-tu trouvé une solution à ce problème ?

    D'avance merci

    Julien

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/06/2008, 16h18
  2. Réponses: 2
    Dernier message: 31/03/2006, 17h48
  3. Comment utiliser une icône personnalisée pour un composant ?
    Par Bruno75 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 22/09/2005, 18h24
  4. Comment est géré l'événement OnTime du Composant TTimer?
    Par Arnaud-h dans le forum C++Builder
    Réponses: 3
    Dernier message: 02/06/2004, 18h10

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