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 :

Problème: CreateProcess() ou API windows?


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Points : 40
    Points
    40
    Par défaut Problème: CreateProcess() ou API windows?
    Bonjour,

    Je voudrais lancer un processus 'B'(sous forme de fichier exe) à partir d'un premier programme 'A', mais j'aimerais que ce processus B soit complètement indépendant de A et viceversa.. qu'il n'y ai donc aucun lien entre eux, pas de valeur de retour, pas d'attente de fin du programme, pas de handle qui traine dans l'un ou dans l'autre...

    Là ou ca devient compliqué(pour moi), c'est que mon processus B doit ouvrir un fenêtre avec un interface avec l'utilisateur... (le processus A ayant déjà un GUI des plus complets...)

    premièrement, je ne suis pas sur que mes processus soient complètement indépendant:

    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
    	ZeroMemory( &StartupInfo, sizeof( StartupInfo ));
    	ZeroMemory( &ProcessInfo, sizeof( ProcessInfo ));
    
    Success = CreateProcess
    	( NULL,		
              LPTSTR(m_szCommand),	
    	NULL,					
            NULL,					
    	FALSE,		
    	DETACHED_PROCESS | NORMAL_PRIORITY_CLASS,	
    	NULL,			
    	m_szCurrentDirectory,	
    	&StartupInfo,			
    	&ProcessInfo			
    	);
    oui / non / besoin d'info?

    Et deuxièmement, impossible d'avoir cette fenêtre pop up

    mais celà est peut être dû à une limitation au niveau de l'api windows?? (lancer un fenêtre d'un processus à partir d'un autre processus qui n'ont rien avoir ensemble)


    J'ai pas l'impression d'être super clair dans mes expliquations, mais j'espère que les plus courageux sauront me lire :d

    si besoin d'info, je suis jamais très loin

    Merci à vous.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    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 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Normalement, rien avec CreateProcess n'empêchera d'avoir cette fenêtre dans B...

    Les processus ne seront "vraiment" indépendants qu'une fois que A aura fermé les deux handles retournés dans ProcessInfo (fonction CloseHandle()).

    Ensuite, l'unique souvenir de leur relation sera le "parent process id" de B, qui n'est utilisé pratiquement nulle part (ce "parent process id" peut très bien désigner un process qui s'est déjà terminé, contrairement aux systèmes unixoïdes). De mémoire, Windows s'en souviendra encore s'il est question des fonctions AttachConsole() ou SetForegroundWindow(), mais c'est peanuts.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Points : 40
    Points
    40
    Par défaut
    Merci pour ta réponse medinoc,

    effectivement, j'arrive à lancer le process qui est indépendant (je le vois dans le task manager), par contre, impossible d'avoir une fenêtre

    que ce soit un bête pop up (MessageBox) qui dit bonjour bien gentillement ou un mini gui qui demande deux informations, je ne vois jamais ma fenêtre

    même un 'notepad.exe' ne fonctionne pas, le process est bien dans le task manager, mais aucun gui n'apparait ...


    Si quelqu'un à une idée pour moi

    merci


    EDIT: petite précision que j'aurais peut être du donner dès le départ, il existe un troisième processus, c'est un service windows et c'est lui qui fait le createprocess()... le fait d'être un processus system donne peut etre des restrictions au niveau de la création des fenêtre? comment récupérer l'environement user ou ...?

  4. #4
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    petite précision que j'aurais peut être du donner dès le départ, il existe un troisième processus, c'est un service windows et c'est lui qui fait le createprocess()... le fait d'être un processus system donne peut etre des restrictions au niveau de la création des fenêtre?
    Oui effectivement, c'est l'information capitale

    Les services fonctionnent en tant que SYSTEM et n'ont pas accès au desktop de la windows station interactive (Winsta0) où s'exécutent les programmes "normaux".

    Pour cela il faut passer la chaîne "WinSta0\\Default" au membre lpDesktop de la structure STARTUPINFO.

    Même si elle ne sert pas, ne pas oublier de passer la taille de la structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ZeroMemory( &StartupInfo, sizeof( StartupInfo ));
    StartupInfo.cb = sizeof(StartupInfo);
    Autre solution :

    START (touche Windows) + R > services.msc > click droit sur le service > Propriétés > Deuxième onglet > checkbox "interagir avec le desktop". (qque chose comme ça, mon Windows n'est pas en français).

    P.S : A partir de Windows Vista, pour des raisons de sécurité, les services ne sont plus capable d'interagir avec le desktop.

    If a service belonging to an application throws a UI, the application is waiting on the service, and the UI is not displayed in the user session.
    cf. The Windows Vista Developer Story: Application Compatibility Cookbook (chapitre "Session 0 Isolation") : http://msdn2.microsoft.com/en-us/lib...ppcomp_topic10

    voir aussi Impact of Session 0 Isolation on Services and Drivers in Windows Vista :
    http://www.microsoft.com/whdc/system.../services.mspx

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 76
    Points : 40
    Points
    40
    Par défaut
    Merci Neitsa,

    je l'ai fait par la checkbox "Allow service to interact with desktop" (moi aussi je l'ai en anglais..) et ca fonctionne parfaitement.

    Concernant Vista, je n'ai pas besoin d'un support immédiat de cette fonctionnalité, donc je vais rester comme ca..

    Encore merci pour votre aide à tous les deux.

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

Discussions similaires

  1. [nasm] problème avec une API window
    Par ctrlD dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 09/12/2011, 15h25
  2. Problème avec ICDecompress API Windows
    Par demontier dans le forum Windows
    Réponses: 2
    Dernier message: 02/09/2011, 11h44
  3. (API Windows) Problème d'affichage de boutons
    Par pioupiou74 dans le forum Windows
    Réponses: 4
    Dernier message: 29/06/2007, 15h52
  4. API windows : problème menu
    Par Gregbeacher dans le forum Windows
    Réponses: 4
    Dernier message: 13/06/2007, 16h35
  5. problème avec "API Windows en C"
    Par Vince-le-fou dans le forum Windows
    Réponses: 2
    Dernier message: 23/11/2005, 16h22

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