Executer un Programme en l'attachant a un processus

Signaler
Messages postés
223
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
15 février 2006
-
Messages postés
223
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
15 février 2006
-
Salut j'aimerais savoir comment executer un programme en l'attachant a un
processus ?

13 réponses

Messages postés
14
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
21 mai 2006

Moi je suis enplein dedans pour un service...
Dans la pratique pour lancer un programme depuis un autre il suffit d'utiliser createprocess..
Voici un petit morceau de code recuperé de ci de la sur le web. Avec ça tu pourra facilement trouver les autres elements necessaires.
En esperant que cela t'aide, bonne continuation :)

Var StartInfo : TStartupInfo;
ProcessInfo : TProcessInformation;
Fin : Boolean;
Fichier : String;
StdOutFile : THandle;
SecurityAttr : TSecurityAttributes;
Lus : Cardinal;
Bloc : PChar;
Long : Cardinal;
Programme : String;
Repertoire :String;
Result:String;


begin



;
programme:=' notepad.exe;
}
FillChar (SecurityAttr, SizeOf(SecurityAttr), #0);
SecurityAttr.nLength := SizeOf (SecurityAttr);
SecurityAttr.lpSecurityDescriptor := Nil;
SecurityAttr.bInheritHandle := FALSE;



Try
{ Mise à zéro de la structure StartInfo }
FillChar(StartInfo,SizeOf(StartInfo),#0);
StartInfo.cb := SizeOf(StartInfo);

If CreateProcess(Nil, PChar(programme), Nil, nil, false,0, Nil, nil, StartInfo,ProcessInfo) Then
Begin

{ ProcessInfo.hProcess contient le handle du process principal de l'application }
Fin:=False;
Repeat
{ On attend la fin de l'application }
Case WaitForSingleObject(ProcessInfo.hProcess, 200)Of
WAIT_OBJECT_0 :Fin:=True; { L'application est terminée, on sort }
WAIT_TIMEOUT :; { elle n'est pas terminée, on continue d'attendre }
End;
{ Mise à jour de la fenêtre pour que l'application ne paraisse pas bloquée. }
Application.ProcessMessages;
Until Fin;
{ C'est fini }
End
Else RaiseLastOSError;
Finally
Messages postés
223
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
15 février 2006

... ok j'vais essayer de faire quelque chose avec ça

mais en passant comment qu'on fait pour que notre programme soit considéré
comme un service?
Messages postés
14
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
21 mai 2006

bon, mais juste en passant alors...
Aulieu de crrer un projet de base style application, tu cré un projet service, cela te cré un objet de type Tservice.
Ensuite tu implement la fonction onExecute, ou OnStrat/onBegin dans le cas d'utilisation d'un Tread. tu compile ton programme et voila. Il existe un excelent exemple Delphi sur ce site, qui m'a permit de faire egalement mes premieres armes a ce sujet. Juste fait une recherche sur Service Windows , et tu trouvera :)
voila.
Messages postés
223
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
15 février 2006

ok merci

mais le code que tu ma donner ne fait qu'exécuter un programme ?
Messages postés
223
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
15 février 2006

ee jveux juste etre sur qu'on parle de la meme chose :

pour moi un service c un programme qui est considéré comme un programme systeme par windows ?
Messages postés
223
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
15 février 2006

J'ai chercher des info sur createProcess mais j'ai pas trouvé comment l'utilisé pour executer un programme en l'attachant a un processus
Messages postés
223
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
15 février 2006

J'ai chercher encore et ca me semble bcp + compliqué que ca attacher un programme a un processus
Il faut que mon programme soit considérer comment un débuggueur et ensuite je peux utiliser la fonction :

function DebugActiveProcess (dwProcessId: DWORD): BOOL
Messages postés
14
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
21 mai 2006

désolé pour la reponse...

woui un service est bien un programme systeme.
Tu créé ton service en delphi (delphi 6 pour moi...) , cela te cré un exe..
en ligne de commande tu ecrit
monexe.exe /install
et ca te l'installe entant que service windows.
Poour le desinstaller tu retape
monexe.exe /uninstall

Voila..
Sinon je comprend pas du tout ce que tu veux faire avec le debuggage...
Messages postés
223
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
15 février 2006

merci c exactment ca que je voulais savoir
mais c ou que j'entre ces commande?
Messages postés
14
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
21 mai 2006

désolé encore pour la reponse tardive.
C'est simple depuis une fenetre Dos.
Demarrer->executer->cmd
et dans le fenetre DOS se placer dans le repertoir (c'est plus simple ).
cd c:\repertoire\monservice
et donc taper monservice.exe /install
Messages postés
223
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
15 février 2006

ok, merci

mais maintenant, si je veux que mon service s'installe automatiquement.
par exemple si je me créer un petit programme qui copira le services a un endroix X, quesce q'il faut que je fasse ensuite pour installer ce service?

j'ai essayer :

Windows.WinExec('cd ' + ExtractFilePath(Application.ExeName);
Windows.WinExec(ExtractFileName(Application.ExeName) + ' /install')

mais ca ne marche pas
Messages postés
223
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
15 février 2006

j'ai été voir la source, mais je n'ai pas vue qu'elle installait sont services.
commment est ce que shellexecute fonctionne pour installer un service?
Messages postés
223
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
15 février 2006

eee ca parle pas de shellexecute
met de net start nonservice.exe
ben comment je me sert de ca?