2010-04-02 4 views
5

J'essaie d'exécuter plusieurs services similaires via ServiceBase.Run(ServiceBase[]) mais il ne fonctionne que le premier. MSDN ne le nie pas explicitement; cet extrait signifie-t-il qu'ils doivent tous être de types différents? (Le gras est de moi, pas MSDN)C#, Windows Services: ServiceBase.Run avec plusieurs services du même type

Appel cette surcharge dans la fonction principale() de l'exécutable de service pour charger un tableau de services associés.

Répondre

7

C'est l'intention. L'idée ici est que vous pouvez avoir un seul exécutable créer "plusieurs services" au lieu d'un seul type de service.

Lorsqu'un service est enregistré auprès du SCM, chaque service doit être unique. Cela suggère (et je crois que c'est le cas) que chaque élément de votre tableau doit être une implémentation unique de ServiceBase.

Si vous essayez simplement d'avoir plusieurs copies du service , je repense votre design. Il suffit que le service éteigne plusieurs threads en utilisant la même méthode, et il fournira le même effet avec une seule instance de service.

+0

Les multiples threads étaient le design original et je faisais juste des expériences avec ça. Merci d'avoir éclairci ça pour moi. –

+1

Il devrait être possible d'avoir 2 Services implémentant le même type. Vous devez juste vous assurer que chaque service a un nom de service unique. Ce scénario est particulièrement utile si vous souhaitez que 2 services aient la même fonctionnalité mais utilisent des configurations différentes. Dites différents dossiers partagés pour lire des fichiers ou des bases de données différentes pour se connecter. J'ai créé une bibliothèque de services Windows appelée Daemoniq. Il prend en charge l'exécution de plusieurs services Windows en un seul processus. http://code.google.com/p/daemoniq/wiki/MultipleWindowsServicesOneProcess. –

+0

Alors que c'est possible, dès que vous les nommez séparément, ils sont essentiellement deux services distincts;) Cela étant dit, votre approche est bonne. –

Questions connexes