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

Langage Delphi Discussion :

Lancer un programme Interactif depuis un service


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Par défaut Lancer un programme Interactif depuis un service
    Bonjour,

    Voici ma problématique:
    J'ai un service qui tourne sous le compte SYSTEM. Ce process effectue différentes tâches, et notamment lance d'autres process. Certains de ces process doivent être lancés même si ma session windows n'est pas ouverte, ce cas ne pose aucun problème. Pour rendre compte à l'utilisateur de la bonne fin de certaines tâches, mon service doit cependant aussi être capable de:

    1. Vérifier qu'une session windows est ouverte.
    2. Si c'est le cas: Lancer un process qui doit lui interagir avec le bureau de la session ouverte.

    Sur XP, pas de souci. Mon service a l'autorisation d'interagir avec le bureau, et si une session est ouverte, le process lancé par le service s'affiche.

    Sur Vista et Seven, autre histoire: Car le process qui doit s'afficher est lancé par le compte SYSTEM, et il n'interagit pas avec le bureau de l'utilisateur qui a ouvert la session.

    Idée: Récupérer simplement le nom du compte de la session ouverte (je cherche explorer.exe dans la liste des process et je récupère le owner du processus, ça, ça marche). Mais si je veux lancer mon process censé s'afficher sur le bureau avec le compte ainsi récupérer, il semble que le mot de passe de session soit requis, or je ne possède pas ce mot de passe.

    Bref, y-a-il un moyen simple et élégant de faire lancer par un service windows un process capable d'interagir avec la session du user loggé, et ce sans avoir besoin de fournir le mot de passe de son compte ???

    Merci

  2. #2
    Membre éclairé
    Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2003
    Messages : 59
    Par défaut
    A chaud, comme ça, ça me semble difficile. En plus, tu pars du principe qu'on ne peut ouvrir qu'une seule session sur un poste, ce qui me semble faux. Tu peux avoir plusieurs sessions simultanées sur un serveur, avec du TSE, ou même deux sessions ouvertes "switchables" sur un même poste.

    J'ai pas tout à fait la même problématique mais j'ai déjà fait un truc de ce style :
    - tu rajoutes un serveur TCP ou UDP à ton service, qui se lance "avant toute chose" (un Indy TCP Serveur)
    - tu balances un raccourci d'un petit .Exe client dans le All Users > Démarrage
    - Le petit exe n'est qu'un simple client TCP/UDP du serveur, il s'y connecte dès le début (avec le Indy TCP Client)
    - lorsque le serveur veut lancer des applis sur les bureaux, il envoie une commande à tous les clients connectés (les petits exe), qui lanceront eux même les applis.

    Bon après, y a toute une gestion au niveau de la sécurité, etc. à avoir.

    C'est vraiment qu'une idée comme ça, c'est pas super simple non plus...

  3. #3
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Salut.

    Mon grain de sel...

    Une autre idée, simple (simpliste ?) :
    un petit exe lancé en tâche de fond à l'ouverture de la session, et qui va chercher un fichier "flag", fichier qui serait créé par le service avec les données à afficher ; si ce "flag" existe, le petit exe affiche une IHM avec le contenu du fichier.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Par défaut
    Pour le multi-sessions, ce n'est pas vraiment un souci, d'abord par que le soft n'est pas destiné à des serveurs, ensuite pour les sessions switchables sur PC, je peux afficher l'info sur toutes les sessions disponibles, ce n'est pas vraiment grave.

    J'avais bien pensé aussi au coup du programme au démarrage de session et qui communique avec le service, mais je voulais juste faire "propre" et ne pas avoir à ajouter un process "service helper" qui au final la plupart du temps tourne pour rien... Mais effectivement s'il n'y a pas d'autre solution, j'en passerai par là...

    En attendant, je reste ouvert à toute suggestion

  5. #5
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Citation Envoyé par sinfoni Voir le message
    (...) mais je voulais juste faire "propre" et ne pas avoir à ajouter un process "service helper" qui au final la plupart du temps tourne pour rien... (...)
    Si ton service est capable de lancer un exe, il le lancerait si un user est loggué et qu'il a besoin de lui dire qqchse ; ensuite, les deux processus pourront communiquer de 36 manières possibles, je pense : échange de fichier, named pipes, mailslots, client/serveur en TCP, etc.

    Nan ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Par défaut
    Oui, mais on tourne en rond, parce que si c'est le service qui lance l'exe, cet exe est lancé sous le compte SYSTEM, et Vista/Seven n'aiment pas visiblement.... Il faut donc que l'exe soit lancé par le démarrage de la session.

    Ce que je ne comprends au final, c'est qu'on donne au service l'autorisation d'interagir avec le bureau, mais que malgré cela, il ne peut par lancer de programme interactif. Etrange...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Par défaut
    Bizarre, sous seven, j'utilise aussi cette fonction qui focntionne bien apres une ouverture de session sauf lors d'un fast user switching (syseme error code 5, access denied). Auriez vous une idée?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/12/2008, 08h26
  2. Lancer un programme à partir d'un service
    Par edam dans le forum Langage
    Réponses: 5
    Dernier message: 21/02/2008, 19h04
  3. Lancer un programme java depuis un programme java
    Par TheBAT dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 06/01/2007, 16h45
  4. Lancer un programme c depuis java dans une console
    Par moise44 dans le forum Général Java
    Réponses: 5
    Dernier message: 04/04/2006, 20h04
  5. [Système] Lancer un programme externe depuis une page web
    Par needles94000 dans le forum Langage
    Réponses: 2
    Dernier message: 08/02/2006, 21h34

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