OVH Cloud OVH Cloud

service windows c# avec DLL c/c++

3 réponses
Avatar
aVr
Bonjour,
Meilleurs voeux pour cette nouvelle année 2006.
Je bloque depuis plusieurs jours sur le problème suivant:
J'ai créé un service windows en C# qui fait appel à des fonctions d'une
DLL écrite en C/C++ (code non managé) via DllImport.
Le service fonctionne bien mais quand j'appelle une fonction de la DLL,
il ne se passe rien; j'ai l'impression que le service ne voit pas mes
fonctions; de plus, je n'ai pas de message d'erreur pour m'orienter vers
un problème.
J'ai mis la DLL dans le même répertoire que l'executable du service
windows et dans le répertoire Windows.System32 sans succès!
Quand j'utilise cette DLL dans un programme console C#, ca marche bien.
Je pense que j'oublie de faire quelque chose: signer la DLL ? créer un
assembly ? l'enregistrer dans le GAC ? mais je croyais que tout cela
était pour du code 'managé'.
est-ce que quelqu'un pourrait m'aider ou me donner une piste ?
(j'ai consulté pas mal de site sur le sujet sans trouver de solution)
Merci d'avance,
aVr

PS: j'ai généré ma DLL avec l'option mutilthread.
PS2: j'utilise Visual Studio 2003.

3 réponses

Avatar
Paul Bacelar
La Dll a-t-elle été conçue pour tourner dans une application service ? (pas
de GUI, pas la même politique de sécurité que l'utilisateur interactif ...)
--
Paul Bacelar
MVP VC++


"aVr" wrote in message
news:43d558fb$0$26083$
Bonjour,
Meilleurs voeux pour cette nouvelle année 2006.
Je bloque depuis plusieurs jours sur le problème suivant:
J'ai créé un service windows en C# qui fait appel à des fonctions d'une
DLL écrite en C/C++ (code non managé) via DllImport.
Le service fonctionne bien mais quand j'appelle une fonction de la DLL, il
ne se passe rien; j'ai l'impression que le service ne voit pas mes
fonctions; de plus, je n'ai pas de message d'erreur pour m'orienter vers
un problème.
J'ai mis la DLL dans le même répertoire que l'executable du service
windows et dans le répertoire Windows.System32 sans succès!
Quand j'utilise cette DLL dans un programme console C#, ca marche bien.
Je pense que j'oublie de faire quelque chose: signer la DLL ? créer un
assembly ? l'enregistrer dans le GAC ? mais je croyais que tout cela était
pour du code 'managé'.
est-ce que quelqu'un pourrait m'aider ou me donner une piste ?
(j'ai consulté pas mal de site sur le sujet sans trouver de solution)
Merci d'avance,
aVr

PS: j'ai généré ma DLL avec l'option mutilthread.
PS2: j'utilise Visual Studio 2003.


Avatar
aVr
Bonjour,
Merci pour votre participation.
En fait, c'est une DLL de communication (code C/C++ - non géré) qui
à l'origine n'était pas prévu pour fonctionner dans un service
windows.
J'ai essayé plusieurs choses au niveau sécurité trouvé sur MSDN:
http://www.microsoft.com/france/msdn/securite/secmod81.mspx
http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/csref/ html/vcwlkSecurityTutorial.asp
mais cela ne fonctionne toujours pas.
Je ne pense pas faire quelque chose de nouveau.
Si vous avez un exemple, je suis preneur...
Cordialement,
Anil

Paul Bacelar a écrit :

La Dll a-t-elle été conçue pour tourner dans une application servic e ? (pas
de GUI, pas la même politique de sécurité que l'utilisateur interac tif ...)
--
Paul Bacelar
MVP VC++


"aVr" wrote in message
news:43d558fb$0$26083$
> Bonjour,
> Meilleurs voeux pour cette nouvelle année 2006.
> Je bloque depuis plusieurs jours sur le problème suivant:
> J'ai créé un service windows en C# qui fait appel à des fonctions d'une
> DLL écrite en C/C++ (code non managé) via DllImport.
> Le service fonctionne bien mais quand j'appelle une fonction de la DLL, il
> ne se passe rien; j'ai l'impression que le service ne voit pas mes
> fonctions; de plus, je n'ai pas de message d'erreur pour m'orienter vers
> un problème.
> J'ai mis la DLL dans le même répertoire que l'executable du service
> windows et dans le répertoire Windows.System32 sans succès!
> Quand j'utilise cette DLL dans un programme console C#, ca marche bien.
> Je pense que j'oublie de faire quelque chose: signer la DLL ? créer un
> assembly ? l'enregistrer dans le GAC ? mais je croyais que tout cela était
> pour du code 'managé'.
> est-ce que quelqu'un pourrait m'aider ou me donner une piste ?
> (j'ai consulté pas mal de site sur le sujet sans trouver de solution)
> Merci d'avance,
> aVr
>
> PS: j'ai généré ma DLL avec l'option mutilthread.
> PS2: j'utilise Visual Studio 2003.


Avatar
Simon Mourier [SoftFluent]
Si c'est un problème avec la DLL de communication, cela ne sert à rien de
regarder du code C# / code managé / Code Access Security.
Il faut analyser ce qui se passe dans cette DLL, surtout si elle fonctionne
en mode console. Parmi les choses qui changent entre console et service:

* la sécurité, pas au niveau .NET, mais au niveau Windows, le compte qui
fait tourner le service a-t-il suffisamment d'accès, etc...
* l'environnement graphique. par défaut il n'y en a pas, etc...

voir qq idées ici:
http://www.mailbag.com/users/pengel/index.html

Simon.
www.softfluent.com


"aVr" a écrit dans le message de news:

Bonjour,
Merci pour votre participation.
En fait, c'est une DLL de communication (code C/C++ - non géré) qui
à l'origine n'était pas prévu pour fonctionner dans un service
windows.
J'ai essayé plusieurs choses au niveau sécurité trouvé sur MSDN:
http://www.microsoft.com/france/msdn/securite/secmod81.mspx
http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/csref/html/vcwlkSecurityTutorial.asp
mais cela ne fonctionne toujours pas.
Je ne pense pas faire quelque chose de nouveau.
Si vous avez un exemple, je suis preneur...
Cordialement,
Anil

Paul Bacelar a écrit :

La Dll a-t-elle été conçue pour tourner dans une application service ?
(pas
de GUI, pas la même politique de sécurité que l'utilisateur interactif
...)
--
Paul Bacelar
MVP VC++


"aVr" wrote in message
news:43d558fb$0$26083$
> Bonjour,
> Meilleurs voeux pour cette nouvelle année 2006.
> Je bloque depuis plusieurs jours sur le problème suivant:
> J'ai créé un service windows en C# qui fait appel à des fonctions d'une
> DLL écrite en C/C++ (code non managé) via DllImport.
> Le service fonctionne bien mais quand j'appelle une fonction de la DLL,
> il
> ne se passe rien; j'ai l'impression que le service ne voit pas mes
> fonctions; de plus, je n'ai pas de message d'erreur pour m'orienter vers
> un problème.
> J'ai mis la DLL dans le même répertoire que l'executable du service
> windows et dans le répertoire Windows.System32 sans succès!
> Quand j'utilise cette DLL dans un programme console C#, ca marche bien.
> Je pense que j'oublie de faire quelque chose: signer la DLL ? créer un
> assembly ? l'enregistrer dans le GAC ? mais je croyais que tout cela
> était
> pour du code 'managé'.
> est-ce que quelqu'un pourrait m'aider ou me donner une piste ?
> (j'ai consulté pas mal de site sur le sujet sans trouver de solution)
> Merci d'avance,
> aVr
>
> PS: j'ai généré ma DLL avec l'option mutilthread.
> PS2: j'utilise Visual Studio 2003.