IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Service Windows : problème avec état du service


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Par défaut Service Windows : problème avec état du service
    Bonjour,

    Je viens à vous car j'ai un problème avec les services Windows.
    Voici ma situation et mon problème :
    J'ai créé un service Windows d'une application C# avec Windows form, pour cela, j'ai coché "Autoriser le service à intéragir avec le Bureau" dans les propriétés du service Windows afin de pouvoir démarrer l'application avec interface graphique depuis le service Windows.
    Jusque là, tout marche bien.
    Mon problème est le suivant : quand je démarre le service Windows, mon application C# s'ouvre bien mais dans la fenêtre des services Windows (commande dos : services.msc), l'état de mon service reste à "starting" et ne passe pas à "started", ce qui m'empêche de redémarrer le service depuis cette fenêtre. Par contre, mon application C# fonctionne très bien ...
    Si j'exécute l'arrêt et le démarrage du service en commande de ligne (net stop nom_service puis net start nom_service), eh bien, j'obtiens le même comportement : état du service toujours à "starting" !!

    Est ce que quelqu'un aurait une idée de pouvoir faire passer l'état du service à "started" ?

    Merci d'avance pour vos réponses.

    Layla

  2. #2
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par défaut
    Tu dois probablement lancer la boucle de messages de ton application dans la méthode OnStart du service, qui ne doit donc pas retourner.

    Si c'est le cas, je pense qu'il faudrait exécuter un appel asynchrone à une méthode qui se chargera de lancer l'application, et qui permettra à la méthode OnStart de se terminer, autorisant ainsi le changement d'état à Started.

    Note par ailleurs que ton service ne pourra pas bien fonctionner sous Vista, car il faudra que l'utilisateur accepte explicitement les services Desktop Interactive, et qu'à chaque fois que le service tentera alors d'accéder au Desktop, l'UAC se déclenchera. SI tu cible cet OS, il va te falloir trouver une autre solution qu'un service.

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Par défaut
    Merci beaucoup pour cette réponse rapide.
    Voici ma méthode OnStart :

    protected override void OnStart(string[] args)
    {
    // TODO : ajoutez ici le code pour démarrer votre service.
    Application.Run(new nom_de_ma_Form());
    }

    Comment faudrait il faire pour lancer un appel asynchrone à une méthode qui se chargera de lancer l'application, et qui permettra à la méthode OnStart de se terminer, autorisant ainsi le changement d'état à Started ?

    Tu peux me donner un exemple s'il te plait ?

    Je te remercie d'avance pour ta réponse.

    Layla

  4. #4
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par défaut
    Tu as plein de possibilité, l'un d'elle étant de lancer un Timer qui appellera une callback qui fera le Application.Run, et qui se désactivera ensuite.

    Tu peux aussi (plus élégant sans doute) passer par le modèle d'exécution asynchrone, cf le MSDN sur le sujet : Modèles de design pour la programmation asynchrone

    Dans tous les cas, l'idée est de ne pas faire le Application.Run, qui est bloquant, dans la méthode OnStart.

    Je n'ai pas vraiment le temps de te pondre un exemple maintenant, mais je pense que tu devrais pouvoir t'en sortir.

  5. #5
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Par défaut
    Encore merci pour cette réponse.
    J'ai opté pour ta 2eme solution : mettre en place un modèle d'exécution asynchrone.
    J'ai réussi à le faire et ça marche très bien.

    Merci pour cette idée.

    Layla

  6. #6
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Si c'est résolu, n'oublie pas de cliquer sur
    Merci
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Windows phone problèmes avec un navigation service
    Par Alann dans le forum Développement Windows
    Réponses: 2
    Dernier message: 01/07/2015, 14h22
  2. Service windows controlé par un autre service windows
    Par johnlobs dans le forum Développement Windows
    Réponses: 0
    Dernier message: 10/07/2013, 13h49
  3. Réponses: 2
    Dernier message: 16/10/2011, 15h17
  4. [C#][service windows] problème de débutant avec 1 timer
    Par Nycos62 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/10/2005, 11h22
  5. [Service Windows]demarrer app winforms comme Service windows
    Par Mehdi Feki dans le forum Général Dotnet
    Réponses: 10
    Dernier message: 26/08/2005, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo