Question

J'ai créé les manifestes nécessaires pour que ma DLL de serveur COM et une application cliente fonctionne sans enregistrement dans Windows XP. J'ai testé toutes sortes de combinaisons (avec et sans enregistrement) et dans tous les cas, l'application client voit la version côte à côte de la bibliothèque si les manifestes sont présents et celle enregistrée, sinon (ou une erreur COM s'il n'y a pas d'inscription du tout). J'ai testé sur ma machine de développement Windows XP et donné les fichiers (DLL, EXE client et un manifeste pour chacun) à des collègues qui ont également tout exécuté avec succès sur leurs propres machines Windows XP. Les manifestes sont des fichiers XML externes, pas des ressources incorporées. Jusqu'ici tout va bien.

Toutefois, lorsque je copie les fichiers sur un ordinateur Windows Server 2003, cela ne fonctionne pas. Je reçois un échec silencieux, mais une erreur d'application dans le journal des événements de l'application (voir ci-dessous). Si je désenregistre la DLL et supprime les manifestes, j'obtiens une erreur similaire (silencieuse à l'invite de commande, mais une erreur d'application dans le journal des événements). De toute évidence, il est difficile de trouver l'enregistrement. Je l'ai reproduit sur toutes les machines Windows Server 2003 auxquelles je peux accéder chez notre société. Selon la documentation de Microsoft sur COM côte à côte / sans enregistrement, il est supposé fonctionner sur Windows XP et versions ultérieures, et Windows Server 2003 et versions ultérieures.

Pour être clair, le même client fonctionne parfaitement sur ces mêmes machines Windows Server 2003 sur une version enregistrée (, à l'aide de regsvr32) de la même DLL COM, sous les mêmes identifiants de connexion que j'essaie d'utiliser pour COM sans inscription. En d’autres termes, il n’existe aucun problème intrinsèque se faisant passer pour un problème COM sans enregistrement: ce client et ce serveur fonctionnent correctement lorsque le serveur est inscrit globalement dans le registre.

Quelqu'un a-t-il une idée sur la manière d'enquêter plus avant? Je ne suis pas un expert de Windows Server, mais y a-t-il un paramètre de stratégie à modifier pour permettre cette prise en charge? Si je parviens à localiser le changement nécessaire, nos techniciens en support technique / infrastructure ne seront probablement pas en mesure de le faire, mais je ne peux pas compter sur eux pour faire de la recherche sur le problème car ils sont submergés.

Au cas où cela serait important (je ne pense pas que ce soit le cas, mais vous ne le savez jamais), la DLL est écrite dans Delphi 2007, tandis que le client est écrit dans Visual C ++.

Event Type: Information
Event Source:   Application Error
Event Category: (100)
Event ID:   1004
Date:       5/2/2009
Time:       8:07:45 AM
User:       N/A
Computer:   ***server name****
Description:
Reporting queued error: faulting application ***program name***.exe, version 0.0.0.0, faulting module ***program name***.exe, version 0.0.0.0, fault address 0x0002ac9e.

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
Était-ce utile?

La solution

Une chose à rechercher est de savoir si l'exe a un manifeste interne. Dans XP, l'ordre de recherche du manifeste exe est externe, puis interne. Dans Server 2003 et versions ultérieures, la commande est interne, puis externe.

Autres conseils

Avec un serveur COM créé dans Delphi 7, j'ai rencontré des problèmes similaires si le serveur COM n'était pas enregistré et que l'application client était démarrée sous un compte utilisateur restreint, car l'implémentation COM de Delphi essayait toujours de mettre à jour les informations d'enregistrement, même lorsque les DLL La fonction RegisterServer n'a pas été appelée explicitement.

Pour savoir s'il s'agit d'un problème, essayez d'exécuter l'application cliente sur un compte doté de privilèges administratifs illimités.

MSDN mentionne que, sous Windows 2003, les problèmes liés aux serveurs COM exempts d'enregistrement doivent être détaillés dans une section spécifique du journal des événements système:

  

Lors du dépannage sans inscription   Problèmes COM, l'observateur d'événements sur   Windows Server 2003 est votre ami.   Lorsque Windows XP ou Windows Server 2003   détecte une erreur de configuration   affiche généralement une boîte de message d'erreur   intitulé pour l'application que vous avez   lancé et contenant le message   "Cette application n'a pas pu démarrer   parce que la configuration de l'application   est incorrect. Réinstallation du   L’application peut résoudre ce problème. " je   conseiller que chaque fois que vous voyez cette   message vous reproduisez le problème   Windows Server 2003, consultez le   Journal des événements système et recherche d'événements   à partir de la source SideBySide. La raison   Je ne suggère pas que vous regardez la   Windows XP Event Log dans ces cas est   qu'il contiendra invariablement un   message tel que "Générer l'activation"   Le contexte a échoué pour [chemin] [application   nom de fichier] .Manifest. Erreur de référence   message: L'opération terminée   avec succès, " ce qui n'aide pas   Identifiez le problème.    http://msdn.microsoft.com/en-us/library/ ms973913.aspx # rfacomwalk_topic6

Indiquez également, si possible, les noms de fichier et le contenu des fichiers de manifeste que vous utilisez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top