web-dev-qa-db-fra.com

Comment passer des paramètres au service Windows?

J'ai essayé de transmettre des paramètres à un service Windows.

Voici mon extrait de code:

class Program : ServiceBase
{
    public String UserName { get; set; }
    public String Password { get; set; }

    static void Main(string[] args)
    {
        ServiceBase.Run(new Program());
    }

    public Program()
    {
        this.ServiceName = "Create Users Service";
    }

    protected override void OnStart(string[] args)
    {
        base.OnStart(args);

        String User = UserName;
        String Pass = Password;
        try
        {
            DirectoryEntry AD = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");

            DirectoryEntry NewUser = AD.Children.Add(User, "user");
            NewUser.Invoke("SetPassword", new object[] { Pass });
            NewUser.Invoke("Put", new object[] { "Description", "Test User from .NET" });
            NewUser.CommitChanges();
            DirectoryEntry grp;
            grp = AD.Children.Find("Administrators", "group");
            if (grp != null)
            {
                grp.Invoke("Add", new object[] { NewUser.Path.ToString() });
            }
            Console.WriteLine("Account Created Successfully");
            Console.ReadLine();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            Console.ReadLine();
        } 
    }

Comment passer le nom d'utilisateur et le mot de passe à ce service Windows?

20
Ragaei Mahmoud

Vous pouvez transmettre les paramètres au démarrage de la manière suivante:

  1. Faites un clic droit sur MyComputer et sélectionnez Gérer -> Services et applications -> Services
  2. Cliquez avec le bouton droit sur votre service, sélectionnez Propriétés et vous devriez voir la boîte de dialogue Paramètres de démarrage sous l'onglet Général.

Si vous entrez ici, par exemple, User Password, vous obtiendrez ces paramètres dans protected override void OnStart(string[] args) sous forme d'argument ..__, puis utilisez-le comme ceci:

protected override void OnStart(string[] args)
{
    base.OnStart(args);
    UserName = args[0];
    Password = args[1];
    //do everything else
}
27
Reniuz

Vous allez devoir charger ces valeurs à partir d'une source externe. Le plus simple consiste à les charger directement à partir d'un fichier app.config, à l'aide du Gestionnaire de configuration. Quelque chose comme ceci: http://msdn.Microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspx

5
Robert Anton Reese

Vous pouvez utiliser fichier de configuration , Registre ou tout type de bases de données .

3
Akram Shahda

Utilisez Environment.GetCommandLineArgs ()

1
Julian

Les deux méthodes les plus propres pour passer des arguments (sans utiliser de registre, de fichiers ou de base de données) à un service Windows au moment de l'exécution consiste à utiliser des tubes nommés ou à configurer un service WCF dans Windows, que votre client appelle. Par défaut, un service Windows est censé être un processus répétitif qui s'exécute.

Si vous utilisez WCF, activez-le dans Ajout/Suppression de programmes (ou Programmes et fonctionnalités pour Windows 7).

Pipes Nommées:

https://msdn.Microsoft.com/en-us/library/aa365590(v=vs.85).aspx

0
MacGyver