2012-06-15 6 views
0

J'ai une étrange question sur le service Windows qui utilise une DLL principale est le nom: Process.dll. Appel de service Windows onstart():comment charger certaines DLL sur la DLL principale dans le service Windows?

Process client = new Process(); 

client.Method(); 

dans cette méthode Process.dll en utilisant un autre dlls. Mais le service Windows ne trouve pas un, b, c dll. Pas démarrer! Le service simple fonctionne bien mais en dessous de l'architecture ne fonctionne pas au service atart windows. Pouvez-vous m'aider comment charger un autre dlls.Ou une solution? Comment écrire des codes selon l'architecture ci-dessous? (A, b, dll c est référence statique.)

enter image description here

+1

Comment Process.dll est-il en train de charger les fichiers a.dll, b.dll et c.dll? Sont-ils référencés statiquement? Ou chargé dynamiquement à l'exécution (dans ce cas, s'il vous plaît montrer le code les charger)? Tous ces assemblages sont-ils présents dans le dossier de travail du service Windows? –

+0

a, b, c dll est la référence statique. – programmerist

+1

Mais sont-ils présents? – NeroS

Répondre

0

Essayez ceci:

Assembly a = Assembly.LoadFrom("YourDLL.dll"); 

    Type t = a.GetType("YourType"); 

    object obj = Activator.CreateInstance(t); 
0

Je trouve que lorsque vous essayez de charger des fichiers (si config ou DLL) à partir d'un service Windows dynamique , est que vous devez spécifier l'emplacement du fichier à charger, même s'il se trouve dans le même répertoire que l'EXE du Service.

Voici un extrait que j'utilise pour obtenir l'emplacement du répertoire de service Windows dynamiquement à partir duquel vous pouvez ensuite utiliser l'extrait de code de aliboy38 pour charger votre DLL.

var exePath = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName); 

Assembly a = Assembly.LodFrom(Path.Combine(exePath, "YourDLL.dll")); 

Type t = a.GetType("YourType"); 

object obj = Activator.CreateInstance(t); 

Espérons que cela aide.

Questions connexes