2009-09-25 8 views
4

J'ai récemment écrit un service Windows et l'ai installé sur le système de production. Après quelques mises à jour Windows appliquées, le serveur a dû être redémarré et mon service ne s'est pas chargé correctement, bien qu'il ait été configuré pour démarrer automatiquement. Le service a démarré manuellement après que nous ayons été remarqués par les clients. Après quelques recherches, j'ai découvert que je manquais d'ajouter une dépendance de service à notre service. Donc, l'ordre de démarrage des services était mauvais pour notre cas.Collecter les dépendances du service Windows

Je pourrais résoudre le problème, mais je suis maintenant vraiment intéressé par un outil ou une procédure sur la façon de collecter toutes les dépendances de service nécessaires. Connaissez-vous un morceau de code qui peut gérer cela?

J'apprécie n'importe quel conseil.

+1

J'ai aussi exactement le même problème. Maintenant, j'ai été lié à l'ajout de ces dépendances dans le service quand il est installé, mais je ne sais pas ce qu'ils pourraient être ... – TheKingDave

Répondre

3

Comment un outil peut-il connaître les services dont vous avez besoin? En analysant le code source? En exécutant votre service jusqu'à ce que le service échoue? La seule façon de faire ce travail est de connaître les services dont vous dépendez et de les ajouter au registre lorsque vous installez votre service. Je ne dis pas qu'il serait impossible d'automatiser cela; mais si cela pouvait être automatisé, Windows le ferait déjà: Lors de la connexion à un autre service, Windows pourrait arrêter votre démarrage jusqu'à ce que cet autre service soit disponible.

+0

L'analyse du code source serait une option. Supposons que vous utilisiez par exemple 'ManagementObjectSearcher', une classe qui utilise certainement WMI. Alors ajoutez la dépendance. Peut-être que cela serait également possible en fonction des dépendances d'assemblage, bien que cela ajouterait également des faux positifs. – Scoregraphic

+0

Je pense toujours que ce serait plus simple si Windows le découvrait lui-même quand il démarre un service. Ce n'est pas une science de fusée. –

+0

Mais comment saurais-je quelles dépendances mon code nécessite? Ai-je besoin d'une dépendance sur DHCP pour un service WCF lié uniquement à/appelé depuis localhost? Comment puis-je même savoir, quels services «généraux» sont disponibles sur les machines client allant de win7 home à win10 pro? –

2

Les services et leurs dépendances sont décrits dans le Registre sous HKLM/System/CurrentControlSet/Services/xxx où xxx est le nom d'un service. Il existe des centaines de services et seulement certains d'entre eux sont visibles dans la console Services.msc. Dans la console des services, vous pouvez afficher la fenêtre de propriétés d'un service et consulter l'onglet Dépendances. Il y aura énuméré les services qui dépendent du service ainsi que ceux dont dépend le service. Dans le registre, chaque service a deux clés facultatives nommées "DependOnService" et "DependOnGroup". Les deux sont de type REG_MULTI_SZ ce qui signifie qu'ils peuvent contenir plusieurs valeurs. Utilisez RegEdt32.exe lorsque vous consultez ces valeurs. C'est là que les dépendances sont définies. Si vous souhaitez rendre votre service dépendant de Microsoft SQL Server par exemple, dans la clé de votre service, ajoutez une clé nommée "DependOnService" contenant "MSSQLSERVER". Vérifiez cela en consultant l'onglet Dépendances de vos propriétés de service.

Si vous voulez découvrir les dépendances de service, vous devez marcher par programme la clé des services dans le registre notant les services et les services dont ils dépendent. Une fois que vous avez fait cela, vous pouvez simplement imprimer les résultats.

J'ai écrit quelque chose de similaire lorsque j'ai voulu découvrir les dépendances entre les assemblages .NET.

+0

Merci pour votre réponse, mais ce n'est pas ce que je cherchais. J'écris le service par moi-même et je veux savoir quelles sont les dépendances dont j'ai besoin pour écrire (ou l'installateur doit écrire). – Scoregraphic

Questions connexes