2011-09-29 4 views
1

J'ai écrit une application Windows Form assez simple qui appelle une DLL non managée pour effectuer la plupart des calculs effectués par le programme. Le programme s'exécute correctement dans les modes Débogage et Libération. Il s'installe également correctement et s'exécute sur l'ordinateur de développement.DLL introuvable dans l'application distribuée

Le problème se pose lorsque je tente de l'installer sur l'ordinateur cible (exécutant le même système d'exploitation: 64 bits Windows 7). Bien que la DLL se trouve dans le même répertoire que le fichier .exe, j'obtiens une "DLL introuvable". Je reçois cette exception lorsque j'essaie à la fois la publication OneClick et lorsque j'utilise un fichier d'installation .msi. L'erreur citera même l'emplacement du fichier tout en indiquant que le fichier n'a pas pu être trouvé.

L'un de mes paramètres d'installation est-il incorrect? Est-ce que je n'inclus pas la DLL ou une référence à l'endroit approprié? Toute aide ou conseil serait apprécié.

Merci.

+0

La DLL non managée est-elle une DLL COM ou vous invoquez-vous? –

+0

J'utilise p/Invoke – GregD

Répondre

4

La DLL que vous avez déployée peut avoir des dépendances supplémentaires que vous n'avez pas déployées. Si ces dépendances ne sont pas présentes, vous obtiendrez généralement ce type d'erreur.

MISE À JOUR:

Le "D" MSVCR100D signifie que c'est la version de débogage de la bibliothèque. Ce n'est probablement pas sur le système cible et la licence vous empêche de le déployer.

Vous devez effectuer une recompilation complète en mode de libération. Une fois cela fait, votre DLL devrait cible MSVCR100 (notez le manque de "D") à la place. Sinon, vous avez probablement une version de débogage de cet assembly. Localisez une version de version et un lien vers cela.

+0

Ajout à la réponse de Chris. Vous pouvez utiliser le réflecteur de RedGate pour obtenir la liste des dépendances pour la DLL non managée. –

+0

J'ai utilisé Dependency Walker pour trouver des DLL dépendantes autres qu'une DLL Intel Performance Primitive incluse dans le répertoire d'installation cible, il y a juste KERNEL32 et MSVCR100D que je ne devrais pas avoir à inclure car ils sont dans le répertoire system32 de l'ordinateur cible ... droite? – GregD

+0

Non, msvcr100d.dll ne peut même pas être distribué. Ne déployez jamais votre build de version. Avec msvcr100.dll –

0

Si vous appelez le code non managé en appelant CreateObject, vérifiez également que vous avez enregistré la DLL non managée sur l'ordinateur cible.

0

Dans un post sur une erreur similaire 'dll not found' chez Microsoft: http://support.microsoft.com/kb/319114, vous pouvez apprendre comment résoudre ce problème basé sur le fait qu'il pourrait arriver en raison de: 1) Fichier dll manquant ou corrompu (également here) 2) Le chemin d'enregistrement qui appelle cette DLL est probablement faux/manquant/endommagé en quelque sorte. Sinon, vous voudrez peut-être vérifier que le nouveau virus/programme malveillant est autour de ...

Questions connexes