Gestion des services windows

Soyez le premier à donner votre avis sur cette source.

Vue 11 723 fois - Téléchargée 680 fois

Description

Voila, apres la suggestion des admins sur la source précédente, j'ai créé une autre similaire mais plus complete et plus longue ;)

Avec cette petite application, on peut gérer (mais d'une façon simple) les services installés

Comme toujour, l'application necessite des droits d'administration donc on doit ajouter un manifest pour l'assembly.

Source / Exemple :


using System;
using System.ServiceProcess;
using System.Windows.Forms;

namespace GestionDesServicesWindows
{
    //NB: Ajout de référence: Assembly System.ServiceProcess 
    //    Comme toujour, elle necessite des droits d'administration, donc le manifest est necessaire
    //      Bon prog ...
    public partial class frmMain : Form
    {

        private void frmMain_Load(object sender, System.EventArgs e)
        {
            ReadSvcs();
        }
        public frmMain()
        {
            InitializeComponent();
        }
        private void ReadSvcs() 
        { 
            //Vecteur contenant la liste des services 
            ServiceController[] ListSvcs; 
            ListViewItem LVW; 
            //Lire la liste des services. 
            ListSvcs = ServiceController.GetServices(); 
            
            lvwServices.Items.Clear(); 

            foreach (ServiceController SingleSvc in ListSvcs)
            { 
                LVW = lvwServices.Items.Add(SingleSvc.DisplayName); 
                LVW.SubItems.Add(SingleSvc.ServiceName); 
                LVW.SubItems.Add(SingleSvc.Status.ToString()); 
                LVW.SubItems.Add(SingleSvc.ServiceType.ToString()); 

                System.Text.StringBuilder dependedServices = new System.Text.StringBuilder(5000,10000); 

                foreach (ServiceController serviceController in SingleSvc.DependentServices) 
                { 
                    dependedServices.Append(serviceController.DisplayName); 
                    dependedServices.Append("; "); 
                } 
                LVW.SubItems.Add(dependedServices.ToString()); 
            } 
        }

        private void lvwServices_Click(object sender, System.EventArgs e)
        {
            //Si un élement est sélectionné 
            if (lvwServices.SelectedItems[0].Text != "")
            {
                switch (lvwServices.SelectedItems[0].SubItems[2].Text)
                {
                    case "Stopped":
                        //S'il est stoppe 
                        cmdStop.Enabled = false;
                        cmdStart.Enabled = true;
                        cmdPause.Enabled = false;
                        break;

                    case "Running":
                        cmdStop.Enabled = true;
                        cmdPause.Enabled = true;
                        cmdStart.Enabled = false;
                        break;

                    default:
                        cmdStop.Enabled = false;
                        cmdStart.Enabled = false;
                        cmdPause.Enabled = false;
                        break;
                }
            }
        }

        private void cmdStop_Click(object sender, System.EventArgs e)
        {
            if (lvwServices.SelectedItems.Count == 0) return;
            if (lvwServices.SelectedItems[0].Text != "")
            {
                StopService(lvwServices.SelectedItems[0].SubItems[1].Text);
            }
        }

        public void StopService(string ServiceName) 
        { 
            ServiceController[] ListSvcs; 
            ListSvcs = ServiceController.GetServices(); 
            try 
            {
                foreach (ServiceController SingleSvc in ListSvcs)
                { 
                    if (SingleSvc.ServiceName.ToUpper() == ServiceName.ToUpper()) 
                    { 
                        SingleSvc.Stop(); 
                        ReadSvcs(); 
                        //Actualisation de la liste. 
                        break; 
                    } 
                } 
            } 
            catch (Exception e) 
            { 
                MessageBox.Show("Impossible de stopper le service, il peut etre désactivé.", "Erreur: " + e.Source); 
            } 
        }

        public void StartService(string serviceName) 
        { 
            ServiceController[] ListSvcs; 
            ListSvcs = ServiceController.GetServices(); 

            try 
            {
                foreach (ServiceController SingleSvc in ListSvcs)
                { 
                    if (SingleSvc.ServiceName.ToUpper() == serviceName.ToUpper()) { 
                        SingleSvc.Start(); 
                        ReadSvcs(); 
                        break; 
                    } 
                } 
            } 
            catch (Exception e) { 
                MessageBox.Show("Impossible de démarrer le service, il peut etre désactivé.", "Erreur: " + e.Source); 
            } 
        }

        private void cmdStart_Click(object sender, System.EventArgs e)
        {
            if (lvwServices.SelectedItems.Count == 0) return;
            if (lvwServices.SelectedItems[0].Text != "")
            {
                StartService(lvwServices.SelectedItems[0].SubItems[1].Text);
            }
        }
        private void cmdRefresh_Click(object sender, System.EventArgs e)
        {
            ReadSvcs();
        }

        private void cmdPause_Click(object sender, EventArgs e)
        {
            if (lvwServices.SelectedItems.Count == 0) return;
            if (lvwServices.SelectedItems[0].Text != "")
            {
                PauseService(lvwServices.SelectedItems[0].SubItems[1].Text);
            }
        }

        private void PauseService(string serviceName)
        {
            ServiceController[] ListSvcs;

            ListSvcs = ServiceController.GetServices();

                foreach (ServiceController SingleSvc in ListSvcs)
                {
                    if (SingleSvc.ServiceName.ToUpper() == serviceName.ToUpper())
                    {
                        if (SingleSvc.CanPauseAndContinue)
                            SingleSvc.Pause();
                        else
                        {
                            MessageBox.Show("Le service ne supporte pas cette opération", "Erreur");
                            break;
                        }
                        ReadSvcs();
                        break;
                    }
                }
        }
    } 
}

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

ricklekebekoi
Messages postés
303
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
24 avril 2009
4 -
Han tiens c'est nouveau ça un switch/case sur une chaine de caractere, ou bien il a toujours été possible de le faire et je n'ai seulement que pris pour acquis qu'on pouvais pas ?
cs_boutemine
Messages postés
78
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
21 mars 2018
1 -
Biensur on peut le faire sur tous les objets valueType
Gendal67
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
-
Oui, on peut le faire.
Par contre, un String n'est pas un type valeur mais un type référence
Gendal67
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
-
Je m'étais jamais posé la question sur un switch/case sur String en fait.
La réflexion de Rick m'a donné l'envie de faire des tests.

Conclusion :

• Un case s'utilise exclusivement avec des constantes. Les chaines de caractères en .NET étant immuables, elles sont donc toutes constantes (si vous changez la chaine, .NET recrée une nouvelle implicitement avec les nouvelles données)

• Si vous déclarer un objet (autre que String) avec le modificateur const afin qu'il soit possible de faire un switch/case dessus, Visual Studio vous informera d'un Warning du type "Tout objet const autre que Sring est obligatoirement initialisé à null".

-> Conclusion finale : le type String est un type particulier dont le comportement vis à vis des switch/case ne semble pas pouvoir être reproduit.
La seule chose que l'on puisse faire c'est faire un switch(monObjet) avec des case de type valueType constantes... en implémentant biensur l'opérateur de cast implicite de monObjet en ce type valueType ; ça, ça fonctionne.

Bref, désolé pour la digression là dessus...
Sinon, merci beaucoup pour la source, j'avais justement besoin de ça pour mon projet !

Cordialement,
Jack
cs_boutemine
Messages postés
78
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
21 mars 2018
1 -
Slt jack
Et oui, c vrai, le string est un polymorphe ;)

Esperant que la source vous aide dans ton project

Bon prog

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.