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 :

[C# service windows] creer un service


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 46
    Points : 36
    Points
    36
    Par défaut [C# service windows] creer un service
    Bonjour

    j'ai une application qui s'appel X
    j'aimerai que X puisse demarrer en service. donc j'ai cree un nouveau service, et la seule chose qu'il est censé faire ce petit service c'est ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    protected override void OnStart(string[] args)
    {
         p = new Process();
         string demarrage = "monapplication.exe";
         p = Process.Start(demarrage,"-start");
         p.WaitForExit();
    }
     
    protected override void OnStop()
    {
         p.Close();
    }

    j'ai ensuite fais un setup
    celui ci m'installe mon service nickel

    j'ai donc tenté de le demarrer, et la il me sort que le service a demarré mais qu'il s'est aussitot arreté
    et bien sur mon application ne s'est pas lancée... savez vous pourquoi?

    merci d'avance
    warenbe

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Essaye de déjà tester ton code hors d'un service Windows: je pense que tu as une erreur à ce niveau là

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 46
    Points : 36
    Points
    36
    Par défaut
    hello merci
    hors du service aucun souci
    comme tu l'as vu le service ne fait que lancer un exe
    seulement quand l'exe se lance il me lache une erreur maintenant... or quand je lance à la main l'exe pas de soucis
    donc est ce que y'a un truc qui change quand c'est un service qui lance mon exe? le chemin du fichier par exemple?

    (ps: je me prend des exceptions du style "mauvais format" lors de conversion en int d'une string ou des trucs commme ça que je n'ai pas habituellement...)


    edit; mon exe ouvre un fichier xml et lis des infos dessus. certaines sont à mettre en int donc c'est la que je me prend des exception je pensE... le truc c que avec le meme fichier xml, aucun soucis quand je lance à la main

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par warenbe Voir le message
    hello merci
    hors du service aucun souci
    comme tu l'as vu le service ne fait que lancer un exe
    seulement quand l'exe se lance il me lache une erreur maintenant... or quand je lance à la main l'exe pas de soucis
    donc est ce que y'a un truc qui change quand c'est un service qui lance mon exe? le chemin du fichier par exemple?

    (ps: je me prend des exceptions du style "mauvais format" lors de conversion en int d'une string ou des trucs commme ça que je n'ai pas habituellement...)


    edit; mon exe ouvre un fichier xml et lis des infos dessus. certaines sont à mettre en int donc c'est la que je me prend des exception je pensE... le truc c que avec le meme fichier xml, aucun soucis quand je lance à la main

    je comprend rien à ce que tu dis.....

    Si tu démarres une console Windows et que tu tapes monapplication.exe -start, ca marche ? Si la réponse est non, tu auras le même résultat dans ton service: il ne trouve pas le fichier monapplication.exe. Il faut alors que tu pointes vers le chemin complet

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 46
    Points : 36
    Points
    36
    Par défaut
    en demarrant en console ça marche (pas besoin de parametres, avec ou sans ça change rien (pour le moment))

    mais des que ça se lance avec le service ça marche pas (exception diverses)

    attention comme je l'ai dis, le service ne fais que lancer un exe qui lui est une application windows form
    car en fait mon but c'est de pouvoir lancer cette application meme quand windows n'est pas sur un compte.

    en résumé:

    si je lance mon appli winform directement : ça marche
    si je lance mon appli winform via un service: ça plante (exceptions diverses)

    le truc c que je comprend pas les exception puisque ça fonctionne parfaitement bien quand je lance directement

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 46
    Points : 36
    Points
    36
    Par défaut
    bon je progresse
    visiblement il trouvait pas mon exe
    maintenant il se lance bien mais je choppe une exception au lancement. donc j'ai mis un try catch pour tracer l'exception

    mais maintenant a la place d'afficher ma boite de dialogue avec l'exception j'ai ça

    Specify the ServiceNotification or DefaultDesktopOnly style to display a notification from a service application

    comme erreur...

    le truc c que je trouve pas ou specifier ce style la ... et j'ai moyen envie d emodifier la totalité de mon programme pour lui faire ecrire dans un eventviewer au lieu de messages box

  7. #7
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 254
    Points
    28 254
    Par défaut
    un service n'est pas censé lancer d'appli qui ont une interface graphique et/ou qui interagissent avec l'utilisateur (fenetres en tout genre, même la moindre message box). C'est l'intérêt du service, il n'a aucun lien direct avec la partie utilisateur de Windows et donc toi, plutot que faire une tache plannifiée, tu fais un service Windows en enfreignant les règles par défaut de développement d'un service.

    Heureusement, billou, il pensé aux gens comme toi
    il te faut dans les propriétés du service, cocher la case dans le deuxième onglet "interagir avec le bureau". Cette option peut être cochée via une clé registre que tu peux créer dans ton setup.

    c'est cela qu'il manque à ton appli pour fonctionner

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 46
    Points : 36
    Points
    36
    Par défaut
    ouais je viens d'essayer ça marche!

    bon mais alors si je veux faire ça proprement comment je fais?

    voila mon souci:

    mon appli peut tres bien tourner toute seul sans que l'utilisateur n'ai a y regarder
    mais de temps en temps il peut avoir envi d'afficher la form pour voir l'etat d'avancement ou les potentielles erreurs survenues

    comment faire?
    dois je faire 2 processus: un qui fait les taches de fond sans form et un qui va se contenter d'afficher une form avec des infos issues du premier processus (mais dans ce cas comment faire converser les deux processus)
    ou dois je continuer avec une form et peut etre y a t il possibilité pour la "cacher" sauf quand l'utilisateur en a besoin...

    je prend exemple sur un logiciel nommé "freesshd"
    il se lance en processus mais pourtant il y a bien une form que l'on peut afficher (icone dans le systray). etg en cas d'erreur il affiche bien une boite de dialogue...

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 46
    Points : 36
    Points
    36
    Par défaut
    BON voila la solution que j'envisage:


    processus A: processus qui va& etre lancé par le service. sa sortie principale est l'event viewer et rien d'autre. donc pas de soucis?

    processus B: au lancement, etablit une liaison avec le processus A via un pipe et permet donc de modifier les otpions, de voir les erreurs potentielles etc. ce processus lui n'est pas un service

    A peut donc tourner independemment de B mais B ne peut pas tourner independemment de A...

    ça vous semble bon?

    ha! si! derniere question: faut il mieu que j'integre tout le code de A dans le service, ou faut il mieu que je cree un exe pour le code de A et un service uqi ne fait que un process.start(A)?

  10. #10
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 254
    Points
    28 254
    Par défaut
    Pourquoi absolument passer par un service?
    fais une application qui affiche une icône dans la systray et n'affiche pas de fenêtre par défaut, c'est tout.

    tu peux lancer l'appli via une clé run ou une tache planifiée. Sinon effectivement, le fonctionnement de filezilla server, c'est deux process comme tu dis : un service et une console et ils communiquent par un pipe mais est-ce le plus simple et est-ce nécessaire?

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 46
    Points : 36
    Points
    36
    Par défaut
    en fait il faut absolument que mon appli demarre meme si l'utilisateur n'est pas loggué, d'ou le processus...

    c'est une appli professionelle et elle doit toujours se lancer au demarrage de l'ordi, quelque soit la session, loggué ou non

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

Discussions similaires

  1. Services windows et autres services windows ?
    Par malgach dans le forum Windows 7
    Réponses: 2
    Dernier message: 12/12/2011, 12h46
  2. galere pour creer un service windows
    Par bender86 dans le forum Py2exe
    Réponses: 2
    Dernier message: 27/08/2011, 18h28
  3. Réponses: 1
    Dernier message: 26/06/2008, 17h45
  4. [G][Service Win.] Installation de service Windows
    Par fatflex dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 02/08/2006, 16h46
  5. créer un service windows
    Par t_om84 dans le forum Général Python
    Réponses: 1
    Dernier message: 19/04/2006, 12h26

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