Как передать параметры службе Windows?

Я попытался передать параметры службе windows.

Вот мой фрагмент кода:

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

Как передать UserName и Password в эту службу Windows?

Ответы

Ответ 1

Вы можете передавать параметры при запуске следующим образом:

  • Щелкните правой кнопкой мыши на MyComputer и выберите Manage → Services and Applications → Services
  • Щелкните правой кнопкой мыши на своем сервисе, выберите "Свойства", затем вы увидите окно "Начать параметры" на вкладке "Общие".

Если вы введете туда, например, User Password, вы получите там параметры в protected override void OnStart(string[] args) в качестве аргументов. затем используйте его следующим образом:

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

Ответ 3

Вы можете использовать файл конфигурации, реестр или базы данных любого типа.

Ответ 4

Используйте Environment.GetCommandLineArgs()

Ответ 5

Два самых простых способа передачи аргументов (без использования реестра, файлов или базы данных) в Windows Service во время выполнения используют Named Pipes или настройку службы WCF в Windows, к которой звонит ваш клиент. По умолчанию служба Windows предназначена для выполнения повторяющегося процесса.

Если вы используете WCF, включите его в "Добавить программы удаления" (или "Программы и компоненты для Windows 7" ).

Именованные каналы:

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