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#] Icône, barre des tâches et Service Windows [FAQ]


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 33
    Points
    33
    Par défaut [C#] Icône, barre des tâches et Service Windows
    Hello,

    Help!
    J'ai un service windows et je veux que pendant son fonctionement il s'affiche une icône dans la barre des tâches.
    Donc, j'ai écrit le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    		protected override void OnContinue()
    		{	
    			NotifyIcon notifyIcon1 = new NotifyIcon();
    			notifyIcon1.Icon = new System.Drawing.Icon (@"C:\service\service.ico");
    			notifyIcon1.Visible = true;
    			notifyIcon1.Text = "Service icône";
             //...........
    mais je ne vois rien dans la barre des tâches quand je reprends mon service

    si qqn pourrait m'aider, je serais très

  2. #2
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    j'ai fais une petite recherche et je crois que malheureusement ca ne soit pas possible (peut-etre me trompe-je) les services ne peuvent pas avoir d'interface

    il faut un autre programme winforms independant du type:
    http://www.devcity.net/net/article.aspx?alias=servicecontroller
    Attention: les icones sont moches

    trouve a partir de:
    http://www.error-bank.com/microsoft.public.dotnet.general/139102_Thread.aspx

  3. #3
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 33
    Points
    33
    Par défaut
    http://www.devcity.net/net/article.aspx?alias=servicecontroller

    en fait, j'ai pas bien compris en en, je dois, en dehors de mon service, ajouter au mon projet encore un WindowsApplication? c'est pas bien car j'aurais probs d'installation, pense-je, et puis, il ne s'git pas de créée une interface pour nu service windows, mais une icône dans le System Tray....

  4. #4
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 33
    Points
    33
    Par défaut
    en fait, comment je dois quand même afficher l'icône?
    MyService.MyWinFormApplication.Run()?

  5. #5
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 33
    Points
    33
    Par défaut
    En fait, donc, le problème est, je vois, que je dois faire un projet des deux applications. Une de laquelle sera "WinService" et l'autre "WinApplication". Alors, je dois avoir un WinService.cs et un WinApp.cs;

    WinApp.cs doit contenir une NotifyIcon, qui devra pouvoir manipuler avec des méthodes de WinService.cs; diable,

    En fait, elles sont des applications indépendantes, et pourtant, je dois les utiliser ensemble.

  6. #6
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 33
    Points
    33
    Par défaut
    en fait:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/actxvnetcontrols.asp

    Citation Envoyé par MSDN
    NotifyIcon

    Generally only used when you are creating a Windows Service, it allows you to set the Icon that is displayed in the System Tray on your task bar. When clicked, you can display a menu or bring up any form in that program.

    Alors c'est possible de creer une icoen a partir d'un service Windows!

  7. #7
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Un service peut avoir une interface graphique ( ce n'est pas trop conseillé) si il est lancé en utilisant le compte localsystem et si l'encoche "Autoriser l'interaction avec le bureau" est cochée. (Via la console des services)

  8. #8
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 33
    Points
    33
    Par défaut
    merci, abdelman, semble à bonne affaire,
    donc, mon service est installé comme local System, mais j'aimerais que la propriété "Autoriser l'interaction avec le bureau" soit cochée automatique par programme...

  9. #9
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    C'est Abelman (pas de d)

    Par programmation avec .NET on ne peut pas "Autoriser l'interaction avec le bureau". regarde les API windows sur les services. Recherche sur Google ServiceMain

  10. #10
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 33
    Points
    33
    Par défaut
    Pardon, abelman, j'ai un abdel ici près de moi, et dans un moment j'ai pensé que toi, tu es arabe aussi, ,

    Merci, dommage que .NET ne permet pas faire cet truc, ok, je chercherai

  11. #11
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Bon on peut le faire en .NET finalement.
    A l'époque où je travaillais dessus je n'avais pas ltrouvé comment.
    La solution passe par une variable à mettre dans la base de registre
    http://www.thecodeproject.com/csharp...iceDesktop.asp

  12. #12
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 33
    Points
    33
    Par défaut
    non, pas de base de registre, on doit créer , donc, une Application Windows, où on peut inclure un Service Controller, qui s'initialise avec le nom de la machine et du service proprement dit, et puis a l'aide de cet Controller on peut démarrer, arrêter etc. le service dont nous avons besoin...

    En fait, maintenant je peux accéder aux fonctions du service, mais pas à ses champs... et donc, voilà...

    P.e. je ne vois pas comment je pourrais afficher le fichier LOG de mon service dans une formulaire Windows...

    PS
    L'article mentionné de toi, tien plutôt de Installation d'un WebService, et ne vise pas le fait que pour créer une setup.msi il est suffi de faire un certain nombre des clicks avec la souris dans VS.
    moi, j'ai une autre pb. - interaction avec le desktop pendant le travail de WS
    merci beaucoup, quand même

  13. #13
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    lol

    Faudrait rajouter ce code dans le Installer avant de generer le .MSI
    Ca coche "l'option autoriser interaction avec le bureau" à l'installation du service
    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
     
      // Here is where we set the bit on the value in the registry.
      // Grab the subkey to our service
      RegistryKey ckey = Registry.LocalMachine.OpenSubKey(
        @"SYSTEM\CurrentControlSet\Services\WindowsService1", true);
      // Good to always do error checking!
      if(ckey != null)
      {
        // Ok now lets make sure the "Type" value is there, 
        //and then do our bitwise operation on it.
        if(ckey.GetValue("Type") != null)
        {
          ckey.SetValue("Type", ((int)ckey.GetValue("Type") | 256));
        }
      }

  14. #14
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 33
    Points
    33
    Par défaut
    voila donc, j'ai chargé la methode de ServiceInstaller de mon service W.

    click sur lui, et j'introduis ton code:


    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
    private void serviceInstaller1_AfterInstall(object sender, System.Configuration.Install.InstallEventArgs e)
    		{
    			// Here is where we set the bit on the value in the registry. 
    			// Grab the subkey to our service 
    			Microsoft.Win32.RegistryKey ckey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey( 
    				@"SYSTEM\CurrentControlSet\Services\WindowsService1", true); 
    			// Good to always do error checking! 
    			if(ckey != null) 
    			{ 
    				// Ok now lets make sure the "Type" value is there, 
    				//and then do our bitwise operation on it. 
    				if(ckey.GetValue("Type") != null) 
    				{ 
    					ckey.SetValue("Type", ((int)ckey.GetValue("Type") | 256)); 
    				} 
    			}
    		}
    j'installe le service et... Autoriser le service interagir avec le bureau n'est pas coché.

    En fait, j'ai crée déjà une autre application, et maintenant je sais pas comment tirer l'infos de EventLog de mon service dans une application Windows...

  15. #15
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Dans l'exemple fourni, ce code est dans le constructeur de l'installer et pas dans l'evenement after_install
    Dans le nom de la clé de registre. Remplace WindowsService1 par le nom de ton service.
    Soit sur d'avoir la propriété Account du ServiceProcessInstaller à LocalSystem.

    ça marche. Je l'ai testé et c'est OK

  16. #16
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 33
    Points
    33
    Par défaut
    En fait, c'est pas dans le ce code est pas dans le constructeur de l'installer(de ServiceInstaller()) , car on ne peut jamais accéder à ce code du Framework, mais dans le méthode InitializeComponent() du ProjectInstaller
    Oui, ça marche, merci beaucoup, c'est vraiment bien!

  17. #17
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Tu es têtu toi
    Je parlais du constructeur du ProjectInstaller. On peut bien y acceder
    Il n'est pas conseillé de modifier la méthode InitializeComponent à la main. Elle est utilisée par le Designer.

    Voici le Code du Constructeur du Project Installer.
    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
    		public ProjectInstaller()
    		{
    			// Cet appel est requis par le concepteur.
    			InitializeComponent();
     
    			// TODO : ajoutez les initialisations après l'appel à InitializeComponent
    			// Here is where we set the bit on the value in the registry.
    			// Grab the subkey to our service
    			RegistryKey ckey = Registry.LocalMachine.OpenSubKey(
    				@"SYSTEM\CurrentControlSet\Services\Coucou", true);
    			// Good to always do error checking!
    			if(ckey != null)
    			{
    				// Ok now lets make sure the "Type" value is there, 
    				//and then do our bitwise operation on it.
    				if(ckey.GetValue("Type") != null)
    				{
    					ckey.SetValue("Type", ((int)ckey.GetValue("Type") | 256));
    				}
    			}
    		}


    Je ne vois pas en quoi il est compliqué.
    @+

  18. #18
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    41
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 41
    Points : 33
    Points
    33
    Par défaut
    Soit et comme ça! Comme tu veux, de toute façon ça marche

    Merci encore une fois

    PS
    vraiment c'est rien compliqué

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/05/2006, 11h50
  2. Ajouter une icône d'une application dans le barre des tâches
    Par Lorponos dans le forum Autres Logiciels
    Réponses: 11
    Dernier message: 13/05/2006, 19h41
  3. Barre des Tâches Windows
    Par bandit boy dans le forum C++Builder
    Réponses: 7
    Dernier message: 03/05/2006, 10h05
  4. HAUTEUR de la barre des tâches de Windows ?
    Par Lung dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 13/12/2002, 11h43

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