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, GUI et Process :D


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 19
    Par défaut Service Windows, GUI et Process :D
    Salut tlm,

    j'ai codé un service windows en C# 2.0 qui a une icone dans le systray quand il est démarré. J'ai bien pris soin d'activer via du code C# "Interagir avec le bureau" lors de l'install, donc de ce coté pas de souci, mon service tourne bien. J'ai l'icone du systray qui apparait, le menu contextuel, etc... tout fonctionne nickel.

    A un point pres. Ah bah oui, si je pose une question, c'est que quelque chose cloche qd meme ^^

    quand je double clicke sur mon icone, je veux pouvoir lancer le navigateur par défaut. Seulement, ca met 30 secondes (pile poil) avant de lancer le brouteur. Hors du service c'est instantanée, je ne comprends pas pourquoi ca freeze.

    Voila un peu de code pour détailler :

    Dans le service lui meme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    protected override void OnStart(string[] args) {
    	m_worker.WorkerSupportsCancellation = true;
    	m_worker.DoWork += new DoWorkEventHandler(m_worker_DoWork);
    	m_worker.RunWorkerAsync();
     
    	Thread v_guiThread = new Thread(new ThreadStart(StartGUI));
    	v_guiThread.IsBackground = false;
    	v_guiThread.Priority = ThreadPriority.Highest;
    	v_guiThread.Start();
    }
     
    private void StartGUI() {
    	Application.Run(new MainForm(null));
    }
    m_worker est un background worker qui surveille un répertoire (avec un timer positionné sur 1 seconde).
    v_guiThread est le thread chargé de démarrer l'interface graphique (au début c'etait aussi un background worker, mais ca change rien en fait).

    Et dans le code la MainForm, sur le double click de l'icone, j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Process p = new Process();
    p.StartInfo.FileName = p_url;
    p.StartInfo.ErrorDialog = true;
    p.StartInfo.CreateNoWindow = false;
     
    Stopwatch v_chrono = new Stopwatch();
    v_chrono.Start();
    p.Start();
    v_chrono.Stop();
    p_url est l'url à ouvrir (ca ourvre automatiquement un navigateur comme ca ^^).
    Le chrono est la pour mesurer le temps, et c'est bien le p.Start() qui prends 30 secondes avant de rendre la main.

    Si quelqu'un a une idée, qu'il n'hésite pas

    Merci d'avance

    Edit : y'a un détail bizarre qd meme, c'est que si je met ce process.start dans le code (sans passer par un double click, par exemple si je le mets sur le onstart), ca lance IE tout de suite. C'est vraiment comme si c'etait le fait de passer par une interface graphique qui bloquait le lancement du process...(d'ailleurs pourquoi 30 secondes, ca sors d'ou cette valeur ??)

  2. #2
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Ce que je vais dire n'as rien à voir avec ton problème mais :

    - Tu lances un navigateur internet avec les droits de ton service ... C'est à dire que si ton service s'éxécute en tant que ServiceLocal alors le navigateur à les même droits c'est à dire tous ... c'est très très très mauvais pour la sécurité ça ...

    Je te conseil de t'orienté vers une architecture avec deux projets. un service windows et une app client. Tu fait communiquer les deux avec WCF par exemple. Avec cette méthode tu élimines deux pb d'un coup : Le pb du démarrage de IE et de la sécurité

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 19
    Par défaut
    Citation Envoyé par dev01 Voir le message
    Ce que je vais dire n'as rien à voir avec ton problème mais :

    - Tu lances un navigateur internet avec les droits de ton service ... C'est à dire que si ton service s'éxécute en tant que ServiceLocal alors le navigateur à les même droits c'est à dire tous ... c'est très très très mauvais pour la sécurité ça ...

    Je te conseil de t'orienté vers une architecture avec deux projets. un service windows et une app client. Tu fait communiquer les deux avec WCF par exemple. Avec cette méthode tu élimines deux pb d'un coup : Le pb du démarrage de IE et de la sécurité

    Salut !

    Pour WCF, ca marche avec .net 2 ca ? C'est pas plutot du .net 3 ?

    Quand a la double appli au début c'etait comme ca, mais on m'a demandé de fusionner les 2, c'est comme ca, j'ai pas le choix. Je suis tout a fait conscient du pbm de sécurité.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 19
    Par défaut
    Bon j'ai trouvé un moyen pour que ca marche (apres avoir essayé whatmille solutions) : il faut que le Process.Start() s'éxécute dans un nouveau Thread.

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 07/05/2010, 14h11
  2. Services Windows et interraction avec une GUI
    Par demonia dans le forum C#
    Réponses: 4
    Dernier message: 31/01/2010, 12h47
  3. service windows et process.start()
    Par isoman dans le forum C#
    Réponses: 4
    Dernier message: 11/03/2009, 11h51
  4. Réponses: 1
    Dernier message: 12/06/2008, 12h24
  5. Service windows et GUI
    Par jagboys dans le forum MFC
    Réponses: 2
    Dernier message: 08/01/2007, 08h33

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