J'ai une application qui s'exécute en tant que service Windows. Il stocke divers paramètres dans une base de données qui sont recherchés au démarrage du service. J'ai construit le service pour supporter différents types de bases de données (SQL Server, Oracle, MySQL, etc). Souvent, les utilisateurs finaux choisissent de configurer le logiciel pour utiliser SQL Server (ils peuvent simplement modifier un fichier de configuration avec la chaîne de connexion et redémarrer le service). Le problème est que lorsque leur ordinateur démarre, il arrive souvent que SQL Server soit démarré après mon service, de sorte que mon service a des erreurs au démarrage car il ne peut pas se connecter à la base de données. Je sais que je peux spécifier des dépendances pour mon service afin d'aider le gestionnaire de services Windows à démarrer les services appropriés avant le mien. Cependant, je ne sais pas de quels services dépendra au moment de l'installation (quand mon service est enregistré) puisque l'utilisateur peut changer de base de données plus tard. Donc, ma question est la suivante: y a-t-il un moyen pour l'utilisateur d'indiquer manuellement les dépendances du service en fonction de la base de données qu'il utilise? Si non, quelle est l'approche de conception appropriée que je devrais prendre? J'ai pensé à essayer de faire quelque chose comme attendre 30 secondes après le démarrage de mon service avant de me connecter à la base de données, mais cela semble vraiment floconneux pour diverses raisons. J'ai également considéré essayer de se connecter "paresseusement" à la base de données; le problème est que j'ai besoin d'une connexion immédiatement au démarrage, car la base de données contient diverses informations vitales dont mon service a besoin au démarrage. Des idées?Définir les dépendances de service après l'installation
Répondre
Dennis ce que vous cherchez est SC.exe. C'est un outil de ligne de commande que les utilisateurs peuvent utiliser pour configurer les services.
sc [Servername] Command Servicename [Optionname= Optionvalue...]
plus specificly vous voulez utiliser
sc [ServerName] config ServiceName depend=servicetoDependOn
Voici un lien sur les options de commandlike pour SC.EXE http://msdn.microsoft.com/en-us/library/ms810435.aspx
Une solution de code (loin d'être idéal):
Dans votre méthode de démarrage codez-le comme une boucle qui se termine lorsque vous avez une connexion. Ensuite, dans ce piège en boucle toute erreur de connexion de base de données et garder réessayant que le code pseudo suivant illustre:
bool connected = false;
while (!connected)
{
try
{
connected = openDatabase(...);
}
catch (connection error)
{
// It might be worth waiting for some time here
}
}
Cela signifie que votre programme ne continue pas jusqu'à ce qu'il ait une connexion. Cependant, cela pourrait aussi signifier que votre programme ne sortira jamais de cette boucle, vous aurez donc besoin d'un moyen de le terminer - manuellement ou après un certain nombre d'essais.
Comme vous avez besoin que votre service démarre dans un délai raisonnable, ce code ne peut pas entrer dans l'initialisation principale. Vous devez faire en sorte que votre programme "démarre" avec succès, mais ne pas effectuer de traitement avant que cette méthode ne soit retournée connected = true
. Vous pouvez y parvenir en mettant ce code dans un fil, puis en commençant votre code d'application réel sur l'événement "thread terminé".
Pas une réponse directe mettre quelques points que vous pouvez regarder dans
- service Windows peut être démarré automatiquement avec un retard. Vous pouvez vérifier cette question dans SO pour quelques informations à ce sujet.
How to make Windows Service start as “Automatic (Delayed Start)”
- Vérifiez ce poste How to: Code Service Dependencies
Merci pour le lien de démarrage différé. Malheureusement, ce n'est disponible sur Vista et plus tard, donc cela ne fonctionnera pas pour mes utilisateurs qui utilisent XP et Server 2003. – Dennis
- 1. Collecter les dépendances du service Windows
- 2. Définir les dépendances inter-répertoires dans Jam
- 3. m2eclipse - après définition de pom et dépendances - pas de bibliothèques sur les dépendances classpath/Maven
- 4. Service WCF avec plusieurs implémentations de dépendances
- 5. Comment définir les conditions qui ont des dépendances dans WiX?
- 6. Comment définir les dépendances "build" entre projets Maven dans Eclipse?
- 7. Comment définir l'autorisation de référence de service?
- 8. Définir les dépendances de fichiers sources dans le fichier csproj sans les modifier manuellement
- 9. Puis-je définir des variables d'environnement pour les dépendances dans les outils de configuration?
- 10. Comment définir les répertoires de travail pour les dépendances DLL dans Visual Studio/C#
- 11. Comment définir les valeurs affichées après l'envoi de PEAR QuickForm?
- 12. 'Dépendances non résolues' après la réinstallation de Grails
- 13. Java Réduire les dépendances
- 14. Éliminer les fausses dépendances
- 15. Déterminez les dépendances .exe
- 16. purge toutes les dépendances
- 17. Unité testant un service WCF avec plusieurs dépendances
- 18. Quelle est la meilleure façon de définir les dépendances entre plusieurs fichiers de construction ant?
- 19. Injection de dépendances dans les tests d'intégration de Grails
- 20. Injection de dépendances wcf
- 21. Quelles sont les dépendances communes de Weblogic 8.1.6
- 22. Définir DropdownList SelectedItem après l'envoi
- 23. Définir automatiquement les dépendances du module Java EE dans Eclipse à l'aide de Maven2
- 24. ignée de définir des dépendances pour les deux jetée: course et déploiement
- 25. Comment créer plusieurs composants d'un service avec des dépendances c'tor
- 26. Dépendances de code source
- 27. Dépendances de la DLL
- 28. Dépendances de déploiement de beans EJB3
- 29. JMeter et le service Web Java s'arrêtent après les heures
- 30. Application Linux - minimiser les dépendances
Merci cela va certainement aider. Ce n'est pas tout à fait idéal car je dois maintenant demander à mes utilisateurs finaux d'exécuter cette commande, mais c'est mieux que rien. – Dennis