55 votes

Plus simple langue pour la création d'un service Windows

Quelle est la langue la plus facile à construire un service Windows?

Le plus facile dans ce cas serait définie comme moins de code, et le point le plus bas de l'entrée dans la langue.

185voto

Matt Davis Points 22019

Au risque d'énoncer une évidence, si vous avez des C/C++/Java fond, je pense que C# vous propose le point le plus bas de l'entrée.

En supposant que vous êtes à l'aide de Visual Studio 2008, vous pouvez suivre ces étapes:

  1. Ouvrez Visual Studio 2008, et sélectionnez le Fichier|Nouveau|Projet option de menu.
  2. Dans la boîte de dialogue Nouveau Projet...
    • Sélectionnez Visual C#|Windows nœud types de Projet
    • Sélectionnez le modèle de Service Windows
    • Entrez un nom et un emplacement pour votre projet
    • Appuyez sur OK
  3. À ce stade, vous avez tous les éléments de base pour votre service Windows. Le Programme.cs fichier contient la méthode main() pour votre service, et de Service1.cs définit le Système.ServiceProcess.ServiceBase composant qui est votre nouveau service Windows.
  4. Dans la Propriété de la Grille de votre Service1 composant, définissez les propriétés suivantes au minimum:
    • (Nom) - donner à votre objet une interface intuitive de nom, par exemple, ServiceExample
    • AutoLog - ensemble d' false pour éviter des incidents en cours d'écriture par défaut pour le journal des événements d'Application (Note: je ne dis pas que vous ne devriez pas le service journal des événements; je préfère juste l'écriture de mon propre journal d'événements au lieu de le journal d'Application - voir ci-dessous)
    • CanShutdown - set en true si vous souhaitez gérer le système de fermetures
    • ServiceName - définit le nom sous lequel le service sera connu le Gestionnaire de Contrôle des Services (SCM)
  5. Dans le code de ServiceExample, le OnStart() et OnStop() des fonctions virtuelles sont écrasé. Vous aurez besoin de remplir ces avec quels que soient vos besoins de services à faire évidemment. Si vous avez modifié la propriété CanShutdown d' true, vous aurez envie de remplacer la OnShutdown méthode. J'ai créé un exemple ci-dessous illustrant l'utilisation de ces fonctions.
  6. À ce stade, le ServiceExample service est essentiellement terminée, mais vous avez encore besoin d'un moyen de l'installer. Pour ce faire, ouvrez le ServiceExample de composants dans le concepteur. Cliquez n'importe où dans le concepteur panneau de configuration et sélectionnez Ajouter un menu d'installation de l'option. Cela ajoute une ProjectInstaller composant à votre projet, qui contient deux composants supplémentaires - serviceProcessInstaller1 et serviceInstaller1.
  7. Sélectionnez le composant serviceProcessInstaller1 dans le concepteur. Dans la Grille des propriétés, définissez les propriétés suivantes:
    • (Nom) - donner à votre objet une interface intuitive de nom, par exemple, serviceProcessInstaller
    • Compte - sélectionnez le compte LocalService comme un minimum, mais vous pourriez avoir à utiliser le service réseau ou compte LocalSystem si votre service plus de privilèges
  8. Sélectionnez le composant serviceInstaller1 dans le concepteur. Dans la Grille des propriétés, définissez les propriétés suivantes:
    • (Nom), vous donnent objet d'une intuition de nom, par exemple, serviceInstaller
    • Description - le service de la description qui apparaîtra dans le SCM pour votre service
    • DisplayName - le nom convivial pour votre service qui apparaîtront dans le SCM pour votre service
    • ServiceName - assurez-vous que c'est le même nom que vous avez choisi pour le Service de la propriété de votre ServiceExample composant (voir l'Étape 4)
    • Démarrertype - indiquez si vous voulez que le service démarre automatiquement ou manuellement
  9. Rappelez-vous que j'ai dit que je préfère écrire les événements de ma propre journal d'événements au lieu de le journal des événements d'Application. Pour ce faire, vous aurez besoin de remplacer la valeur par défaut EventLogInstaller dans votre ProjectInstaller avec un programme personnalisé. Rendre votre code pour votre ProjectInstaller ressembler à ceci:


using System.Diagnostics;
[RunInstaller(true)]
public partial class ProjectInstaller : Installer
{
    public ProjectInstaller()
    {
        InitializeComponent();

        EventLogInstaller installer = FindInstaller(this.Installers);
        if (installer != null)
        {
            installer.Log = "ServiceExample"; // enter your event log name here
        }
    }

    private EventLogInstaller FindInstaller(InstallerCollection installers)
    {
        foreach (Installer installer in installers)
        {
            if (installer is EventLogInstaller)
            {
                return (EventLogInstaller)installer;
            }

            EventLogInstaller eventLogInstaller = FindInstaller(installer.Installers);
            if (eventLogInstaller != null)
            {
                return eventLogInstaller;
            }
        }
        return null;
    }
}

À ce stade, vous pouvez construire votre projet pour obtenir votre exécutable Windows service. Pour installer votre service, ouvrez Visual Studio 2008 invite de commande et accédez au Debug ou Release répertoire où votre exécutable. À l'invite de commandes, tapez la commande suivante: InstallUtil ServiceExample.exe. Cela permettra d'installer votre service sur la machine locale. Pour le désinstaller, tapez la commande suivante à l'invite: InstallUtil /u ServiceExample.exe

Tant que votre service n'est pas en cours d'exécution, vous pouvez apporter des modifications à votre service et re-construire, c'est à dire, vous n'avez pas à désinstaller votre service pour apporter des modifications. Cependant, il vous sera impossible de remplacer le fichier exécutable avec vos corrections et améliorations tant qu'il est en cours d'exécution.

Pour voir votre service dans l'action, ouvrez le ServiceExample.cs de fichiers et d'apporter les modifications suivantes:

using System.Diagnostics;
public partial class ServiceExample : ServiceBase
{
    public ServiceExample()
    {
        // Uncomment this line to debug the service.
        //Debugger.Break();

        InitializeComponent();

        // Ties the EventLog member of the ServiceBase base class to the
        // ServiceExample event log created when the service was installed.
        EventLog.Log = "ServiceExample";
    }

    protected override void OnStart(string[] args)
    {
        EventLog.WriteEntry("The service was started successfully.", EventLogEntryType.Information);
    }

    protected override void OnStop()
    {
        EventLog.WriteEntry("The service was stopped successfully.", EventLogEntryType.Information);
    }

    protected override void OnShutdown()
    {
        EventLog.WriteEntry("The service was shutdown successfully", EventLogEntryType.Information);
    }
}

Une fois que vous exécutez votre service avec ces changements, vous pouvez regarder le ServiceExample journal des événements dans l'Observateur d'Événements et de voir les messages enregistrés.

Espérons que cette aide.

EDIT: Si vous préférez utiliser le journal des événements Application pour votre journalisation des événements au lieu d'un programme personnalisé, il suffit de n'apporter aucune modification à la ProjectInstaller.cs fichier. En outre, de laisser de côté la ligne qui définit la propriété du Journal du Journal des événements dans le ServiceExample constructeur. Lorsque vous exécutez votre service, votre journal des messages apparaissent dans le journal des événements d'Application.

4voto

Richard B Points 1106

Je suis d'accord avec tout le monde qui a répondu ailleurs, mais je vous dirais de ne pas trop se concentrer sur la langue, aussi longtemps que vous travaillez dans le .NET framework, et il y a un starter projet pour vous, vous êtes bon pour aller. J'ai fait plusieurs "services Windows" dans le passé, et à la fois dans VB.NET et C#, avec un minimum de code.

Ce que je recommanderais l'OP à faire est d'apprendre à construire le package du programme d'installation. Installer le service est aussi facile que de l'exécution "installutil.exe {lecteur}\path\to\file.exe" mais quand vous avez à faire quelque chose de plus grand que le déploiement d'un "hello world" service Windows, il est bon de savoir et de comprendre comment déployer le service de manière significative.

Ne pas commencer une guerre de flammes, mais j'ai "normalisé" sur l'utilisation de WiX pour tous mes packages de déploiement, en dehors de faire de la vieille école de COM interop genre de chose, puisque c'est un choc de travail à faire pour installer correctement. Je suis impatient pour le WiX équipe pour développer le programme d'amorçage pièce qui vous permet de mettre les conditions préalables et les principaux msi dans un fichier EXE qui peut être téléchargé. Ils l'ont prévue pour la 3.5, je vais donc attendre patiemment, et l'utilisation de WinZip Self-Extractible fichiers exécutables pour l'instant.

0voto

Doug L. Points 2216

Pour moi, et j'ai seulement essayé un couple de façons, Visual Studio et C# était le plus facile.

Visual Studio n'tous les services nécessaires de la plomberie l'installation pour le cadre et j'ai trouvé C# est très facile à apprendre, la migration de VB6, VB.NET et C.

0voto

Scott Ferguson Points 3418

Avec Visual C#, vous trouverez la plupart des exemples de code sur le net. Combiné avec Visual Studio, et c'est une promenade dans le parc pour obtenir une base de Windows Service et en cours d'exécution. Visual Studio permet également un composant logiciel enfichable pour créer un package d'installation MSI.

Que serait mon choix

0voto

Novice Points 283

L'utilisation du Service de Visual Studio type de projet, l'utilisation de C# ou de VB.NET.

Personnellement, je préfère le C#, mais en général, il est facile de comprendre le cycle de vie et code de la logique à la scène désirée.

La construction d'un programme d'installation est également très facile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X