Как передать параметры в службу Windows? - PullRequest
21 голосов
/ 27 июня 2011

Я пытался передать параметры в службу 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();
        } 
    }

Как передать имя пользователя и пароль этой службе Windows?

Ответы [ 5 ]

27 голосов
/ 27 июня 2011

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

  1. Щелкните правой кнопкой мыши MyComputer и выберите «Управление» -> «Службы и приложения» -> «Службы»
  2. Щелкните правой кнопкой мыши свой сервис, выберите «Свойства», после чего вы увидите окно «Параметры запуска» на вкладке «Общие».

Если вы введете туда, например, 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
}
5 голосов
/ 27 июня 2011

Вам нужно будет загрузить эти значения из внешнего источника. Проще всего загрузить их прямо из файла app.config, используя Configuration Manager. Примерно так: http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspx

3 голосов
/ 27 июня 2011

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

1 голос
/ 19 октября 2016

Использовать Environment.GetCommandLineArgs ()

0 голосов
/ 27 января 2016

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

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

Именованные трубы:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...