Comment utiliser une version 32 bits de l'objet COM sur Windows Server 2008 (travaux sur 2008 R2, mais non 2008)
Je suis en utilisant la valeur par défaut DllSurrogate pour permettre l'automatisation de 32 bits de l'objet COM en 64 bits. Cela fonctionne parfaitement dans Windows7 64 bits et Windows Server 2008 R2. Cependant, la saveur régulière de Windows Server 2008 (pré R2) ignore complètement le DllSurrogate entrée dans le registre. J'ai fait des recherches pendant des jours et trouvé de la documentation classique de Windows Server 2008 avait registre de réflexion qui ignore la DllSurrogate valeur si son vide. (Je laisse de la valeur de la chaîne de registre vide pour utiliser la valeur par défaut de Substitution.) Pour contourner ce non-réfléchie (pas de copié entre 32 bits et 64 bits des registres), je lance le regedit.exe*32 et configurer les touches. Puis-je ouvrir normale regedit et configurer les touches. Toujours pas de chance. J'ai également essayé le réglage de la DllSurrogate valeur de registre c:\windows\syswow64\dllhost.exe de sorte que la valeur n'est pas vide, mais qui ne fonctionne pas du tout (sur n'importe quel OS). L'erreur que je reçois est "ne peut pas créer d'objet activex."
J'ai reproduit le problème sur 2 de Windows Server 2008 (Pré R2) des machines. J'ai aussi vérifié que l'objet COM peut être utilisé sur les machines lors du lancement d'une version 32 bits de l'application. J'ai utilisé LINQPad 32 bits et 64 bits pour tester. LINQPad l'exécution de 32 bits peut créer l'objet COM. 64bit LINQPad ne peut pas.
[texte du lien][1] <-- la Solution, je suis en utilisant (fonctionne sur R2)
http://msdn.microsoft.com/en-us/library/aa384253(SV.85).aspx <-- Documentation DllSurrogate entrée de registre n'est pas reflété sur Windows Server 2008, mais je ne sais pas comment faire pour contourner cette limitation. J'ai essayé d'utiliser regedit.exe*32 pour modifier le registre 32 bits directement.
Les idées de ce que je suis en manque ici? Est-il une astuce particulière pour utiliser la valeur par défaut DllSurrogate (dllhost.exe) sur la pré-R2? La réécriture de notre COM .NET n'est pas une option pour le moment. J'espère que je suis juste en manque de quelque chose comme cela ne fonctionne sur la dernière version de Windows Server 2008 R2.
Merci de prendre un coup d'oeil!
Danny
Oui, mais pas de chance. Il accepte et montre l'AppId (que j'ai mis mon COM est GUID) à la fois 64 bits regedit et 32 bits regedit. Il semble ignorer la valeur. DLLHost.exe n'apparaît jamais dans le gestionnaire des tâches. Merci pour la suggestion.
J'ai trouvé un indice. DllHost.exe ne démarre lorsque je crée l'objet, mais son 64-bit DllHost.exe. De toute façon, pour lui dire d'utiliser la version 32 bits C:\windows\syswow64\?
OriginalL'auteur Danny | 2010-10-28
Vous devez vous connecter pour publier un commentaire.
Problème résolu! Merci Hans pour moi la mise sur la bonne voie! Par accident, j'ai configuré le système pour utiliser une version 64 bits DLLHost.exe fichier, qui n'a pas fonctionné, car il ne pouvait pas lancer un 32 bits de l'objet COM.
Start-to-finish, voici comment j'ai pu utiliser mes 32-bit COM objet à partir d'une application 64 bits.
Registre de l'objet COM avec regedit*32 (c:\windows\syswow64\regedit)
Faire les modifications de registre suivantes. Assurez-vous de mettre tout cela en vertu de Wow6432Node de sorte que le 32 bits DLLHost sera utilisé.
Déterminer votre objet COM GUID par la recherche de registre pour classname. c'est à dire. Classname serait la valeur que vous passez à createobject, comme CreateObject("classname").
Localiser les clés
HKey_Classes_Root\Wow6432Node\CLSID\[GUID]
.Ajouter une nouvelle Valeur REG_SZ (chaîne) appelé AppID avec un le COM GUID de l'objet en tant que valeur.
Ajouter une nouvelle clé
HKey_Classes_Root\Wow6432Node\AppID\[GUID]
.En vertu de cette nouvelle clé, ajoutez une nouvelle Valeur REG_SZ (chaîne) appelé DllSurrogate. Laissez la valeur vide.
Si pas déjà fait, créer une nouvelle Clé sous
HKey_Local_Machine\Software\Wow6432Node\Classes\AppID\[GUID]
.Si ce n'est déjà là, ajouter une nouvelle Valeur REG_SZ (chaîne) appelé
DllSurrogate
sous cette clé. Laissez la valeur vide.Maintenant, lorsque vous créez votre objet COM, vous devriez voir DLLHost.exe*32 apparaître dans le gestionnaire des tâches. Tournez sur la ligne de commande de colonne dans le gestionnaire des tâches et vous devriez voir
C:\windows\syswow64\dllhost.exe /processid:{YourCOMGUIDHere}
Merci à vous, d'une certaine manière cela a aidé à résoudre mon problème
OriginalL'auteur Danny