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

MFC Discussion :

Service NT & CoCreateInstance (PROBLÈME)


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Par défaut Service NT & CoCreateInstance (PROBLÈME)
    Bonjour, j'essaye de contrôler msn messenger via un service NT.

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    IMessenger *pIMessenger = NULL;
    	CoInitialize(0);
    	CoCreateInstance(CLSID_Messenger, NULL, CLSCTX_ALL , IID_IMessenger, (void **)&pIMessenger);
    	pIMessenger->Signout();
    	CoUninitialize();
    	ExitProcess(0);
    MAIS LORSQUE LE CODE ARRIVE À COCREATEINSTANCE, LE SERVICE NE L'EXÉCUTE PAS ET IL FAIT RIEN. COCREATEINSTANCE NE RETOURNE RIEN. ES-CE UN PROBLÈME DE SÉCURITÉ NT ??? COMMENT PERMETTRE À UN SERVICE D'EXÉCUTER DES OBJETS COM ???


    MERCI
    [pense a mettre la balise code,Farscape Merci]

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    COCREATEINSTANCE NE RETOURNE RIEN.
    Il retourne QUOI exactement ?
    CoCreateInstance retourne TOUJOURS un HRESULT.
    Avec la valeur de ce HRESULT, tu peux savoir ce qui a réussi ou échoué...
    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 averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Par défaut Vraiment bizzarre
    Ce que vous ne comprenez pas c'est que ce code est un "service NT"; il ne fonctionne sous l'account "SYSTEM" vu que c'est un service et non une application. J'ai mis des Beep(1000,500); pour me servir d'indicateurs pour voir si le code s'exécute correctement. MAIS LE DEUXIÈME BEEP NE SE FAIT PAS ENTENDRE; ET MON MSN MESSENGER NE SE DÉCONNECTE PAS. DANS UNE APPLICATION NORMALE, LE CODE FONCTIONNE PARFAITEMENT. J'AI MEME FAIT FONCTIONNER MON SERVICE AVEC L'ACCOUNT "ADMINISTRATEUR" ET ÇA BOGUE AUTANT. LE CODE S'ARRÊTE ET CoCreateInstance NE RENVOIE RIEN. ÇA BOGUE LÀ.

    ES-CE QUE LES SERVICES NT PEUVENT EXÉCUTER DES OBJETS COM+, ACTIVEX ??? SI OUI, PUIGE AVOIR UN EXEMPLE CONCRET DE L'UTILISATION D'UN SERVICE NT ET COCREATEINSTANCE AVEC MSN MESSENGER.

    MERCI !!!


    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
    DWORD WINAPI thread(LPVOID lpParam)
    {
    	/*while(inter->flasherPoint)
    	{
    		inter->inverserEtatPoint();
    		Sleep(2000);
    	}*/
    	IMessenger *pIMessenger = NULL;
    	CoInitialize(0);
    	Beep(1000,500);
    	Sleep(1000);
    	CoCreateInstance(CLSID_Messenger, NULL, CLSCTX_ALL , IID_IMessenger, (void **)&pIMessenger);
     
    	Beep(1000,500);
    	pIMessenger->Signout();
    	CoUninitialize();
    	ExitProcess(0);
    	Beep(1000,100);
     
    	return 0;
    }

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    1°) Arrête de crier, s'il te plait.

    2°) Tu veux dire que CoCreateInstance() plante et ne retourne pas (et non pas "ne retourne rien") ??
    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 averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Par défaut En plein ça
    oui c'Est ça !!!! il ne retourne pas

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Et si tu essaies en décomposant ?
    C'est à dire, essayer avec CoGetClassObject() pour obtenir une IClassFactory, puis appeler IClassFactory::CreateInstance() pour créer l'objet...
    Tu pourrais sans doute voir lequel des deux plante, non?


    (enfin, je dis ça, je ne suis pas sûr, je n'ai jamais fait du COM autrement qu'en inproc...)
    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
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Un truc à faire attention, c'est l'ordre de création des services, il me semble.

    Lorsque ton programme s'exécute comme une application normale, tous les services sont accessibles.

    Si ton service s'exécute avant que le service d'accès aux composants COM ne soit lancé, bah c'est normal que ça plante.

    D'ailleurs si tu testais la valeur de retour de CoInitialize, tu aurais moins de surprise et tu pourrais gérer le plantage .

    Et je te conseille aussi d'utiliser cette fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HRESULT CoInitializeEx(void * pvReserved, DWORD dwCoInit);
    Citation Envoyé par Médinoc
    1°) Arrête de crier, s'il te plait.
    LOL

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Par défaut Des espoirs....
    J'ai essayé ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CoGetClassObject(CLSID_Messenger,CLSCTX_ALL,NULL,IID_IMessenger,(void **)&pIMessenger);
    et il me renvoie ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    REGDB_E_CLASSNOTREG 
    CLSID is not properly registered. Can also indicate that the value you specified in dwClsContext is not in the registry.
    Normalement il devrait me renvoyer S_OK.....

    pkoi ça ne fonctionne pas ??? Es-ce à cause que je suis dans un service NT et qu'il est exécuté en SYSTEM (local account)

  9. #9
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    J'ai trouvé ce lien, peut-être que ça peut t'aider:

    http://www.microsoft.com/msj/0596/activex0596.aspx

    Regardes le paragraphe "Windows NT Services". Ca parle de COM et de service.

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/03/2010, 12h42
  2. [C#][Service Win.][1.1] problème de droits
    Par iamspacy dans le forum C#
    Réponses: 1
    Dernier message: 01/12/2006, 11h04
  3. Réponses: 5
    Dernier message: 22/08/2006, 15h21

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