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

Windows Discussion :

CreateProcess et Ctrl-C


Sujet :

Windows

  1. #1
    Membre confirmé
    Avatar de Nicolas Bauland
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 119
    Points : 563
    Points
    563
    Par défaut CreateProcess et Ctrl-C
    Bonjour,

    Je suis en train de créer une appli win32 sous forme de boite de dialogue qui gere un petit programme serveur (svnserve pour etre precis).
    Apres quelques galeres avec CreateProcess et l'Unicode, j'ai fini par pouvoir lancer un programme avec cette fonction.
    Reste que ce programme qui est un programme console, ne se termine qu'avec l'appui sur ctrl-c.
    Cela est-il possible a partir de mon appli, d'envoyer un "signal" ctr-c au programme ?

    D'avance merci.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Regarde du coté de GenerateConsoleCtrlEvent()...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Avatar de Nicolas Bauland
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 119
    Points : 563
    Points
    563
    Par défaut
    La fonction semble repondre exactement a mes besoins ... mais je n'arrive pas a la faire fonctionner...

    Voila comment je cree le process(j'ai enleve les tests sur la fonction):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CreateProcess(NULL,(LPWSTR)runit,NULL,NULL,FALSE,
                              // La j'hesite entre les valeurs a passer, c'est peut etre de la que vient le pb.
    		// 0,
    		// CREATE_DEFAULT_ERROR_MODE,
    	             CREATE_NEW_PROCESS_GROUP ,
    		 NULL,NULL,                              
    		 &m_siStartupInfo,&m_piProcessInfo) == FALSE);
    Je precise que le programme se lance bel et bien.

    Voila comment je tente de le terminer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	GenerateConsoleCtrlEvent(1,m_piProcessInfo.dwProcessId);
    Resultat: j'ai d'un cote mon appli win32 qui a cree le process qui se lance dans une console, et quand j'essaie d'arreter le process: rien !!! Si je stoppe l'appli win32, la console reste intacte ...


    Pour Medinoc: Merci pour la rapidite de la reponse

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Quand je vois ce genre de chose, j'ai tout de suite un gros doute, mais bon, si le process se lance...


    Pour l'event, je ne vois pas ce qui peux causer l'erreur. Par contre, tu vas remplacer ce 1 que je ne saurais voir par la vraie constante CTRL_BREAK_EVENT.

    Ensuite, vérifie si le process que tu tues réagit à Ctrl+Pause, car ce n'est pas la même chose que Ctrl+C...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé
    Avatar de Nicolas Bauland
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 119
    Points : 563
    Points
    563
    Par défaut
    Voila ce que c'est de modifier du code a tour de bras: on fait des bourdes. C'est la qu'il faut faire une pause ...

    Donc en effet, le serveur peut se tuer par un Ctrl-c ou ctrl-break, les deux semblent fonctionner.

    La ou j'ai peut-etre fait une boulette, c'est dans le parametre dwCreationFlag de CreateProcess: je ne sais pas trop quoi y mettre, ne comprenant a vrai dire pas trop les différences entre les paramètres "passables".

    Note: en effet le CTRL_BREAK_EVENT est bcp plus propre. Quant au (LPWSTR), il faut que je trouve plus propre en effet. Enfin, cela n'empeche pas la creation du process.

    Desole d'etre un !!!

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Le plus propre dépend ce comment arrive runit.
    Si tu cherches le const_cast, ben... En C++, mets effectivement un const_cast< LPTSTR > (note le T au lieu du W).

    Ou bien, tu peux utiliser la fonction C _tcsdup(), mais n'oublie pas de faire un free() après avoir créé le processus...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre confirmé
    Avatar de Nicolas Bauland
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 119
    Points : 563
    Points
    563
    Par défaut
    Bon ca ne veut pas fonctionner ...

    Je change donc d'approche (ce qui n'est peut-etre pas plus mal finalement !), je gere le service: install, start, stop, uninstall.

    C'est un peu plus touffu mais ca semble bien debute.

    Je marque le sujet resolu bien qu'il ne le soit pas tout a fait: il est resolu par une "non utilisation" de ce qui pose probleme, mais le but est bien que cela fonctionne.

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

Discussions similaires

  1. Comment désactiver Ctrl+Alt+Del sous Windows XP
    Par ETOKA dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 04/06/2003, 13h34
  2. ctrl+alt+sup et W2k
    Par Lucien dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 26/05/2003, 13h54
  3. Comment récupérer le raccourci Ctrl F4
    Par stef02032000 dans le forum C++Builder
    Réponses: 3
    Dernier message: 21/05/2003, 15h53
  4. [VB6] Multiselection avec CTRL dans une msflexgrid
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 17/04/2003, 10h57
  5. CreateProcess + paramètres passé
    Par obione dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 20/03/2003, 17h25

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