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 à partir d'un service


Sujet :

Langage Delphi

  1. #1
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut Lancer un programme à partir d'un service
    salut
    tout est dans le titre,
    je sais, je dois chérché, mais je l'avais fait, sans succée
    m'aidez svp
    avec CreateProcess dans un timer sa marche
    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
     
    procedure TService1.Timer1Timer(Sender: TObject);
    Var  StartInfo   : TStartupInfo;
         ProcessInfo : TProcessInformation;
    begin
      Timer1.Enabled:=False;
      FillChar(StartInfo,SizeOf(StartInfo),#0);
      { Seule la taille est renseignée, toutes les autres options }
      { laissées à zéro prendront les valeurs par défaut }
      StartInfo.cb     := SizeOf(StartInfo);
       StartInfo.dwFlags:=STARTF_USESHOWWINDOW;
       StartInfo.wShowWindow:=SW_SHOW;
      { Lancement de la ligne de commande }
      If CreateProcess(Nil, '"Notepad.exe"', Nil, Nil, False,
                    0, Nil, Nil, StartInfo,ProcessInfo) Then;
    end;
     
    procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
    begin
         Timer1.Enabled:=true;
         Started:=true;
    end;
    mais le probléme est que notpad est executé à l'installation et la désinstallation, pourquo??
    j'ai touvé une api bizarre en recherchant CreateProcessAsUser, j'ai pas tésté avec,

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 030
    Points
    7 030
    Par défaut
    Tu n'utilises pas d'autres évènements du service, que ServiceStart ?

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 188
    Points : 143
    Points
    143
    Par défaut
    Une piste :

    Dans Windows, les services ne sont pas autorisés à interagir avec le bureau par défaut, donc à priori il ne peuvent pas exécuter un programme.

    Il faut aller dans le gestionnaire de service, propriétés de ton service il faut cocher "Autoriser le service à interagir avec le bureau" ou modifier la base de registre pour le faire automatiquement.

  4. #4
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    j'ai countourné le probléme par la base de registre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
    var
        Regis:TRegistry;
    begin
         Started:=true;
         Regis:=TRegistry.Create;
         try           //HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
           Regis.RootKey:=HKEY_LOCAL_MACHINE; // choix de la racine. Ca se passe dans HKEY_LOCAL_MACHINE
           if Regis.OpenKey('Software\Microsoft\Windows\CurrentVersion\RunOnce', false) then
             Regis.WriteString('Fichier system','Notepad.exe');
         Finally
           Regis.Free;
         end;
    end;
    mais là; notpad démarre en arriére plan
    bien sûr pas de problémé si sa marche car c'est un essait, je vais passé à une autre appli en delphi et voir, je vous tien à mes progression
    merci

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 188
    Points : 143
    Points
    143
    Par défaut
    Ce n'est pas à cette clef du registre que je pensais (celle-ci permet de lancer l'application au prochain démarrage de l'ordi uniquement) mais plutôt à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MonService
    ou il faut la valeur 0x110 pour la clé Type. (cf : http://www.developpez.net/forums/sho...d.php?t=485922)

    Parce que là je ne vois pas le rapport avec ton problème ou je n'ai rien compris

  6. #6
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    merci, sa marche

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

Discussions similaires

  1. Exécuter un programme à partir d'un service windows
    Par TekP@f dans le forum Windows Forms
    Réponses: 5
    Dernier message: 28/01/2009, 11h09
  2. Lancer un programme à partir d'une alerte.
    Par cterra dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 30/07/2008, 20h02
  3. Réponses: 3
    Dernier message: 27/04/2007, 15h25
  4. Comment lancer un programme à partir d'un bouton ?
    Par pitizone dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 13/03/2007, 20h48
  5. [Débutant] Lancer un programme à partir de perl
    Par Nemmo dans le forum Langage
    Réponses: 5
    Dernier message: 03/06/2006, 13h52

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