2009-08-19 5 views
0

Y at-il un nombre maximum de fois qu'une DLL peut être enregistrée et désinscrite dans une période de temps spécifique?Nombre maximal de fois qu'une DLL peut être enregistrée/non enregistrée?

Voici ce que je veux dire et pourquoi: j'ai un paquet d'intégration continue qui construit mes applications VB6 et pour construire chacun des 80 composants de la solution, I:

  1. récupérer les dépendances de chaque projet en tour
  2. enregistrer le fichier DLL (en utilisant NAnt < comregister annuler l'enregistrement = "false" ... ...>)
  3. construire le projet
  4. publier le fichier .dll de sortie ou .exe dans un endroit sûr
  5. désenregistrer dll (en utilisant NAnt < comregister annuler l'enregistrement = "true" ... ...>)

Maintenant, tout cela fonctionne 100% du temps, IF Je construis chacun des 80 projets manuellement; Cependant, si je reçois mon script NAnt pour construire les 80 projets, à leur tour (dans l'ordre correct), la construction ne parvient, me donnant cette erreur dans la sortie CruiseControls ...

[comregister] Unregistering 1 files 
[comregister] c:\location\myBuild.include(301,4): Error while unregistering 'c:\\[project-location]\lib\myDependentDLLFile.dll' Unable to find an entry point named '**DllUnregisterServer**' in DLL 'c:\\[project-location]\lib\myDependentDLLFile.dll'. 

(je ne sais pas où 'DllUnregisterServer' vient cependant!)

La même erreur apparaît alors pour tous les projets suivants que je construis après le point de défaillance, qui est autour de la zone 50-projets-construit. Ce que je veux dire, c'est que les 50 premiers projets vont bien, alors le reste échoue à son tour. J'ai atténué cela en utilisant l'attribut failonerror = "false" dans l'appel de comregister à l'intérieur de NAnt, mais cela me fait douter que cela soit correct ou non ...!

Idéalement, je souhaite supprimer l'attribut failonerror et signaler les erreurs réelles aux fonctions de journalisation de CruiseControl. Des pensées ou des suggestions?

+0

Je me demande si l'échec de trouver DllUnregisterServer est juste une supposition, et l'erreur réelle est quelque chose d'autre ...? Pouvez-vous obtenir Nant pour afficher l'erreur Win32 en quelque sorte? Peut-être pourriez-vous modifier la tâche du serveur d'enregistrement pour émettre plus d'informations ... DllUnregisterServer est une fonction que tous les serveurs COM DLL doivent exporter et quel code d'enregistrement appelle simplement à l'annulation de l'enregistrement des objets du serveur. –

Répondre

1

Non, il n'y a pas de maximum. Utilisez Dumpbin.exe ou Depends.exe pour examiner cette DLL et vérifier que le point d'entrée DllUnRegisterServer est défini.

+0

Les DLL qui sont en cours de désinscription et qui échouent sont celles que je vais avoir construites plus tôt dans le processus - pensez-vous qu'il pourrait y avoir un problème plus haut dans la chaîne? –

+0

DllUnregisterServer est le point d'entrée utilisé pour annuler l'inscription d'un serveur COM. S'il s'agit d'une DLL de serveur COM, vous devez vous assurer qu'il possède ce point d'entrée. Si ce n'est pas le cas, n'essayez pas de l'enregistrer ou de l'annuler. En fait, je ne vois pas pourquoi vous le désinscriviez lors d'une construction de toute façon. –

+0

Eh bien, j'essayais de le désinscrire, sinon je devais enregistrer la même DLL un million de fois dans différents endroits sur mon PC/serveur. Raison d'être, j'utilise Ivy pour résoudre les dépendances de son référentiel à un dossier lib dans le dossier que le projet (qui est en cours de construction à cette instance) vit.Parce que c'est un dll VB6, je dois l'enregistrer avant utilisation, puis j'espérais nettoyer après moi-même et désinscrire les fichiers de dépendance inutiles. C'est tout, vraiment. –

0

Je ne pense pas que teher est une limite au non du registre/unregister de DLL.

+0

Eh bien, c'est ce que je pensais à l'origine, mais cela semble me montrer le contraire ...: o ( –