2009-05-29 8 views
0

Voici mon problème:32 bits application n'a pas réussi à exécuter sur x64 Win2003 en raison de

J'ai développé une application qui peut être exécuté sur différentes plates-formes, y compris Windows et Unix. Cette application fonctionne bien sur une pure boîte Win32 (WinXP) ou une pure Win64 (édition Win2K3 x64) et d'autres plates-formes Unix.

Il échoue uniquement lors de l'exécution sur un Win2K3 64 bits en mode 32 bits. Cette application invoque une DLL tierce à l'exécution. Et les DLL tierces ne sont pas formellement installées, mais simplement copiées à un emplacement dans le même env. Je suis également sûr d'avoir la bonne version de ces dll de tierce partie (je veux dire la version 32 bits pour le mode 32 bits). Même si je définis manuellement le "chemin" dans cette boîte de test, cela ne fonctionne toujours pas. L'application est compilée et construite en mode 32 bits dans cette boîte Win2K3. Je cours runner de dépendance et vois la même erreur.

Impossible de trouver cette DLL tierce.

Quelqu'un peut-il jeter des lumières à ce sujet? Comment puis-je rendre visible ce chemin dll tiers à mon application ou au système?

+0

dans le dépendant de la marche, il n'est pas capable de trouver la DLL entière elle-même ou il se plaint de certaines méthodes étant absent? – Naveen

+0

il se plaint que la DLL entière ne peut être trouvée. – awatto

Répondre

1

Je vous suggère de faire ce qui suit:

  • vous assurer que vous utilisez 32 bits version de la DLL problématique avec application 32 bits
  • utilisation Filemon pour voir ce que les chemins de votre application tente lors du chargement que contrôle DLL
  • si cela fonctionne si vous placez cette DLL dans l'un de ces chemins
  • utilisation marcheur de dépendance avec cette DLL lui-même - il pourrait avoir ses propres dépendances non résolues
+0

Merci pour les suggestions. J'ai copié les DLL tierces dans le répertoire de travail. Mais le problème existe toujours. Avec Dependency Walker, il semble que la DLL tierce manque de ses dépendances, comme MFC80.dll, etc. Cependant, ces fichiers manquants existent dans le système, mais avec deux versions, une pour x86 et une pour x64. Il pourrait confondre la 3ème partie dll. Question, est-il possible de définir explicitement le chemin sur Win2K3 x64 pour exécuter les applications 32 bits? J'ai mis les variables d'environnement comme "PATH", mais ne semble pas fonctionner. – awatto

+0

votre DLL est construite avec vs2005 qui a en fait deux versions de runtime - pre-sp1 et sp1 (chaque bibliothèque aurait sa propre version, de sorte qu'il existe plusieurs versions de la même bibliothèque). La version concrète de l'exécution requise par une DLL doit être définie (très probablement) dans le manifeste incorporé à l'intérieur de la DLL. Essayez de regarder dans le manifeste (comme décrit ici http://stackoverflow.com/questions/420852/reading-an-applications-manifest-file) et de voir si vous avez des versions correspondantes de Visual Studio DLL dans System \ WinSxS. Si ce n'est pas le cas, vous devez installer le logiciel redistribuable approprié. – Andrey

+0

Merci pour cette info. Je vais essayer de regarder ça. BTW, notre application a été construite avec VS 2003.Net sur Windows 64 bits pour l'édition 32 bits, et construit avec VS 2005 pour l'édition 64 bits. Est-ce que cela fait une différence en termes de recherche de la bonne DLL à charger? – awatto

0

WOW64 redirige tous les appels par applications 32 bits dans le dossier System32 dans le dossier SysWOW64. La DLL tierce est-elle dans le dossier system32? Parce que le dossier system32, contrairement à ce que vous attendez, contient SEULEMENT 64 bits DLL sur Windows x64.

+0

nos DLL tierces sont placées dans son propre dossier.Mais ces DLL ne sont pas enregistrées. ils sont simplement copiés à cet endroit. ils ne sont pas installés via un programme d'installation. – awatto

Questions connexes