J'ai une application qui gère le traitement lourd pour mon projet, et besoin de le convertir en un «service Windows». Je dois permettre l'exécution de plusieurs
versions
instances du traitement de l'application, ce qui semble être une exigence assez normale.Plusieurs instances de même application en tant que service Windows?
Je peux voir au moins trois approches pour ce faire:
- Créez un répertoire unique installé (EXE, DLL, configuration), mais installer comme plusieurs services cas de celui-ci.
- Avoir un seul Services instance engendrer plusieurs instances de lui-même après le lancement, un Apache.
- Avoir un seul Services instance engendrer plusieurs threads qui fonctionnent dans le même espace de processus.
Mon intention était approche # 1, mais je continuais de trébucher sur les limites, à la fois dans la conception et surtout la documentation pour services:
- sont des paramètres jamais passés à OnStart() par les mécanismes de services normaux sur un système sans surveillance? Si oui, quand/pourquoi?
- Passer les paramètres d'exécution via le registre ImageKey semble un jeu d'enfant, existe-t-il un meilleur mécanisme?
- J'ai obtenu l'application pour installer/désinstaller lui-même comme une paire de services ("XYZ # 1", "XYZ # 2", ...), en utilisant le ImageKey pour lui remettre un numéro d'instance de paramètre de ligne de commande ("-x 1", "-x 2") mais il me manquait quelque chose. Lorsque vous tentez de démarrer le service, il échouerait avec "Le programme exécutable que ce service est configuré pour fonctionner en ne met pas en oeuvre le service
Ainsi, les questions suivantes:.
- est-il une description concise de ce qui se passe lorsqu'un service démarre, en particulier pour les situations où le NomService n'est pas codé en dur (voir Q ci-dessus).
- a-t-approche utilisée quelqu'un # 1? Tous les commentaires avec succès?
NOTE: J'ai déjoué le problème en utilisant l'approche # 3, donc je ne peux pas justifier beaucoup de temps à comprendre cela. Mais je pensais que quelqu'un pourrait avoir des informations sur la façon de mettre en œuvre # 1 - ou de bonnes raisons pour lesquelles ce n'est pas une bonne idée.
[Modifier] J'ai eu à l'origine une 4ème option de (installer plusieurs copies de l'application sur le disque dur), mais je l'ai enlevé parce qu'il se sent juste, euh, hackish. C'est pourquoi j'ai dit "au moins trois approches".
Toutefois, sauf si l'application est recompilée, elle doit définir dynamiquement son ServiceName, d'où la solution au troisième problème ci-dessus.Donc, à moins qu'une instance nécessaire pour modifier ses fichiers d'installation, # 1 devrait fonctionner correctement avec N fichiers de configuration dans le répertoire et une entrée de registre indiquant ce que l'instance devrait utiliser.
C'est la solution "installer l'application plusieurs fois". – NVRAM