web-dev-qa-db-de.com

Wie übergeben Sie Parameter an den Windows-Dienst?

Ich habe versucht, Parameter an einen Windows-Dienst zu übergeben.

Hier ist mein Code-Snippet:

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();
        } 
    }

Wie gebe ich Benutzernamen und Kennwort an diesen Windows-Dienst?

20
Ragaei Mahmoud

Sie können Parameter beim Start wie folgt übergeben:

  1. Klicken Sie mit der rechten Maustaste auf MyComputer und wählen Sie Verwalten -> Dienste und Anwendungen -> Dienste
  2. Klicken Sie mit der rechten Maustaste auf Ihren Dienst, wählen Sie Eigenschaften aus und Sie sollten das Feld Startparameter auf der Registerkarte Allgemein sehen.

Wenn Sie dort beispielsweise User Password eingeben, erhalten Sie diese Parameter in protected override void OnStart(string[] args) als args . Dann verwenden Sie es wie folgt:

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

Sie müssen diese Werte von einer externen Quelle laden. Am einfachsten ist es, sie direkt aus einer app.config-Datei mithilfe des Konfigurationsmanagers zu laden. So ähnlich: http://msdn.Microsoft.com/de-de/library/system.configuration.configurationmanager.appsettings.aspx

5

Sie können Konfigurationsdatei , Registry oder jede Art von Datenbanken verwenden.

3
Akram Shahda

Use Environment.GetCommandLineArgs () verwenden

1
Julian

Die zwei saubersten Möglichkeiten, Argumente (ohne Registrierung, Dateien oder Datenbanken) zur Laufzeit an einen Windows-Dienst zu übergeben, sind Named Pipes oder das Einrichten eines WCF-Dienstes in Windows, den Ihr Client aufruft. Standardmäßig ist ein Windows-Dienst ein sich wiederholender Prozess, der ausgeführt wird.

Wenn Sie WCF verwenden, aktivieren Sie es unter Hinzufügen, Entfernen von Programmen (oder Programme und Funktionen für Windows 7).

Named Pipes:

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

0
MacGyver