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

C# Discussion :

service automatique mais ne demarre pas.


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 12
    Points
    12
    Par défaut service automatique mais ne demarre pas.
    Bonjour a tous!

    Voila, je suis en train d'ecrire un service windows en C# .Net. Je souhaiterai qu'il se lance automatiquement au demarrage, je l'ai donc parametré en automatique.

    Quand j'ouvre ma session pour la première fois, je vais dans services.msc et je constate que l'etat de mon service est "demarrage". Quelques secondes plus tard, le démarrage ne semble pas être fait et quand je clique sur le service, windows me propose (dans le menu de gauche) de le demarrer.

    Je clique, et là, le service ce lance sans accro.... auriez-vous une idée de ce qui peut faire que mon service n'arrive pas a se lancer tout seul au démarrage (bien qu'il soit en automatique) mais ait besoin que je clique sur demarrer pour se lancer?

    Au lancement, j'ecris un fichier dans un dossier de windows, mais cette operation est try/catché et si erreur il y a, un rapport est ecrit dans un log...

    Merci!

  2. #2
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Je cherche des pistes, mais je trouve aucune doc..

    J'imagine que si mon service n'arrive pas a demarrer au lancement de ma machine, mais apres (a la main), c'est qu'il lui manque quelque chose pour se lancer correctement au demarrage de la mahcine.

    Ca pourrait pas venir de dependance entre service... ?

    J'utilise un FileSystemWatcher, un EventLog dans mon service... j'ai besoin d'attendre quelque chose pour les utiliser ?

    C'est chelou parceque mon code est pas mal try/catché, mais je tombe dans aucune exception!

    J'avoue, jsuis un peu perdu la... need backup
    Merci d'avance!

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Bonjour,

    Comment tu le sais si le service ne démarre pas qu'il n'y a aucune exception ?

  4. #4
    Membre habitué Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Points : 154
    Points
    154
    Par défaut
    Je ne connais pas les services en C#, mais un peu en C++ et souvent ce genre de symtome est dû au fait que quand le service se lance au démarrage ce n'est pas comme si il était logger avec ton user. Donc il n'a pas accés à certaines choses comme les lecteurs réseaux,etc... Et quand tu le lances toi même tu es logger donc là il y a accès.

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Merci, vos idées mon fait pensé a blinder mon code de log.

    Je remarque que l'execution s'arrete quand je cherche a récuperer le nom d'utilisateur et le hostname. je fais comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
     
                try
                {
                    ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName, Name FROM Win32_ComputerSystem");
     
                    eventLog1.WriteEntry("managementObjectSearcher created");
     
                    eventLog1.WriteEntry("search user and hostname");
                    foreach (ManagementObject mo in searcher.Get())
                    {
                        if (mo["UserName"] != null)
                        {
                            _username = mo["UserName"].ToString();
                        }
                        if (mo["Name"] != null)
                        {
                            _hostname = mo["Name"].ToString();
                        }
                    }
                    eventLog1.WriteEntry("user and hostname found");
                    eventLog1.WriteEntry("try dispose searcher");
                    searcher.Dispose();
                    eventLog1.WriteEntry("searcher disposed");
                    searcher = null;
                }
                catch (Exception e)
                {
                    eventLog1.WriteEntry(e.Message);
                    this.Stop();
                }
    Le dernier log que j'ai est "search user and hostname", je bloque donc sur la recherche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ManagementObject mo in searcher.Get()
    J'utilise cette methode un peu barbare pour savoir quel est l'utilisateur logué car une methode classique me renvoie NT/SERVICE_SYSTEM (ou quelque choses comme ca.. car le service tourne en privilèges system Local)

    Vous pouvez m'expliquer pourquoi cette requete plante (genre boucle infinie car le demarage automatique du service est interrompu par un timeout du systeme) ? Par la meme occasion, comme connaitre le vrai nom de l'utilisateur courant dans un service ?

    Merci !

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Ca doit probablement venir de là. Au démarrage du service la première fois, il n'y a pas d'utilisateur connecté donc la requête va probablement planter lamentablement. J'ai lu un post récemment sur le forum où il était question d'événements lorsqu'un utilisateur se connecte à sa session ou s'en déconnecte et qu'un service .NET peut écouter. Ces événements pourraient remplacer avantageusement ton code.

  7. #7
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Merci de ta réponse
    Je suis meme a l'origine du poste dont du fait allusion.

    Je pensais que les services se lancaient à la première session et pas au moment du boot

    Jvais essayer de resoudre cela en hookant les event de log.
    Merci pour ta réponse.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Oui je viens de le retrouver.

    En fait, pourquoi ne pas lancer périodiquement ton code dans un thread séparé avec un timeout, c'est la solution la plus simple non ?
    Tu peux alors suivre la connexion de l'utilisateur (avec un petit décalage, mais est-ce important ?) et la déconnexion ou le switch entre utilisateurs.

  9. #9
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Merci pour votre aide.

    Jme susi debrouille en hookant l'event de login. J'en ai juste besoin pour la premiere fois. Pour le reste du temps, ca se gere tout seul

    Merci pour le coup de main!

  10. #10
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    sinon tu peux créer une tache planifié du type
    à chaque fois qu'un user se log, lancer tel exe
    et si tu veux garder ton service, l'exe lancé peut juste faire "net start monservice"
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. windows serveur 2003 : service symantec ne demarre pas
    Par Emcy dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 09/04/2008, 09h25
  2. Réponses: 0
    Dernier message: 12/02/2008, 10h50
  3. service Tomcat6 ne demarre pas, JAVA1.6
    Par djibril dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 05/09/2007, 16h07
  4. Réponses: 17
    Dernier message: 24/11/2006, 15h19
  5. service windows qui ne demarre pas automatiquement
    Par youcef81 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 17/07/2006, 08h41

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