2010-09-27 5 views
2

J'ai développé une DLL 64 bits en utilisant C++ et Visual Studio 2008 et j'essaye de l'enregistrer sur une machine cible en utilisant 'regsvr32.exe'. J'ai vérifié le fichier manifeste et il est clairement quelle version de CRT est nécessaire:VC++ Problème Redist CRT

<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='amd64' publicKeyToken='1fc8b3b9a1e18e3b' /> 

Quand j'essaie d'enregistrer le fichier que je reçois toujours un message d'erreur côte à côte indiquant que les paramètres d'application sont incorrectes et que je devrais le réinstaller.

Log Error: Generate Activation Context failed... Reference error message: The referenced assembly is not installed on your system.

La machine cible exécute Windows Xp Professional 64 bits. J'ai essayé d'installer le paquet redistribuable de VC++ correspondant (VC++ 2008 Redist x86 et), créez une installation et incluez le module de fusion correspondant (microsoft_vc90_crt_x86_x64.msm), installez tous les paquets redistribuables de VC++, etc. Peu importe ce qui est installé, il échouera toujours .

Si je vérifie les fichiers dépendants et qu'ils sont correctement situés dans le dossier WinSxS, mais si je cours Dependency Walker sur le fichier, il se plaindra aussi que les fichiers du CRT VC9 sont introuvables.

Si je compile le fichier pour 32 bits, il sera correctement enregistré sur un système d'exploitation 32 bits. Je manque d'idées et toute aide est très appréciée.

Merci,

Adrian.

EDIT * Ceci est reproductible seulement sur Win XP 64, tout fonctionne très bien sur Windows 7 64 bits.

+1

Cela devrait fonctionner, mieux documenter votre problème. Copiez et collez le message du journal des événements * exact *, documentez le module de fusion * exact * que vous utilisez. –

Répondre

1

En fin de compte, j'ai réussi à résoudre ce problème en incluant une version plus récente de modules de fusion C++ redistribuables dans la configuration ainsi que tous les modules de fusion de règles requis afin de rediriger les appels vers n'importe quelle ancienne version vers la nouvelle version disponible.

La chose la plus importante ici est que l'exe redistribuable inclut les fichiers de politique et les modules de fusion ne le font pas, ils doivent donc être ajoutés séparément.

1

Je ne suis pas un expert en installation mais avez-vous pensé à distribuer les redistribuables dans le dossier racine de votre application? Quant à moi, je n'ai jamais entendu parler de l'utilisation de regsvr32.exe pour installer crt redist.

+0

Salut, dans ce cas déployer le redis dans le même dossier n'est pas applicable et je n'utilise pas regsvr32 pour les installer, je l'utilise pour enregistrer ma DLL parce que c'est un composant COM. –

1
<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' ... 

devrait-il pas

<assemblyIdentity type='win64' name='Microsoft.VC90.CRT' ... 

?

Vous avez besoin le moteur d'exécution 64 bits

+0

Cela a du sens, mais le manifeste est généré par VS et j'ai pensé qu'il devrait savoir ce qu'il fait. Je vais essayer de le changer et voir comment ça fonctionne. –

1

On dirait que malgré l'application est de 64 bits, il cherche les dll crt 32bit. Avez-vous essayé d'installer le paquet redistribuable 32 bits?

Voici une bonne description sur la façon de traquer les défaillances SideBySide: http://blogs.msdn.com/b/junfeng/archive/2006/04/14/576314.aspx

+0

Oui, j'ai installé les deux versions des paquets redistribuables mais pas de changement, merci pour le lien que je regarde. –

Questions connexes