2012-02-25 3 views
3

J'ai créé un fichier de bibliothèque C#, qui ira au chemin local pour, par exemple, (c: \ test.txt) trouver le fichier et le télécharger sur le serveur ftp.comment appeler ma DLL à partir du service Windows?

Pour tester je viens d'appeler la DLL de l'application console, mais comment je peux fonctionner en tant que service Windows, qui fonctionnera en continu?

Je suppose d'exécuter cette DLL en tant que service pour surveiller le dossier c: \ si un fichier vient comme "test.txt", puis télécharger.

Merci à l'avance

Répondre

5

Une DLL est « appelé » lorsque vous utilisez c'est des fonctions. Donc, si vous avez un projet DLL avec quelques classes et quelques fonctions dans vos classes, simplement add the DLL as a reference à votre projet de service et appelez les fonctions appropriées.

Vous pouvez utiliser this library pour créer votre service Windows. La raison en est, lorsque vous construisez un service Windows à l'aide du modèle Visual Studio, la version résultante n'est pas vraiment 'exécutée'. La version résultante est un service Windows qui doit être installé, puis started using the Services Snap-In. Mais en utilisant la bibliothèque de services Windows personnalisée de Hoytsoft, votre service s'installe automatiquement et se lance automatiquement - comme une application Windows Form normale. Pour garantir l'exécution de votre service au démarrage, n'oubliez pas de configurer votre classe de service sur AutoStart (comme expliqué dans son article CodeProject). Pour vous assurer que votre service s'exécute en continu, même lorsque le processus est tué, vous pouvez ajouter ce hack de registre pratique qui définit les indicateurs de service de redémarrage sur Redémarrer immédiatement.

Ce registre Hack == enter image description here

Registre Hack:

Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\<YOUR_SERVICE_NAME_HERE>", true); 
key.SetValue("FailureActions", new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, Microsoft.Win32.RegistryValueKind.Binary); 
key.Close(); 

Comprendre que tout utilisateur administratif peut tuer encore votre processus en désactivant simplement votre service.

+0

Ceci est génial Jason mais je ne suis pas sûr que le HoytSoft.dll exécuté sur mon environnement de test est 64 bits. – Usher

+0

Hmm, avez-vous une erreur spécifique alors? – Jason

+0

Je n'ai pas encore testé dans mon environnement de test avant le déploiement, je veux juste m'assurer qu'il prend en charge 64bit aussi. – Usher

0

Consultez la classe FileSystemWatcher pour vérifier les modifications apportées à un répertoire/fichier.

+1

merci pour votre aide, mais vous pourriez avoir mal compris, j'ai eu la réponse de Jason. – Usher

+0

Ok, il semblait que votre objectif était de surveiller un répertoire, et c'est ce que fait la classe FileSystemWatcher. –

+0

Non, on m'a donné un exemple, j'étais supposé surveiller ma base de données (déclencheur utilisé plus tôt) mais ne fonctionne pas dans mon scénario, j'ai donc changé pour Windows service pour faire cette partie. – Usher

Questions connexes