Как передать параметры в службе Windows из установщика в основную функцию в Program.cs? - PullRequest
3 голосов
/ 20 февраля 2011

Я успешно передал параметры из Installutil моему сервисному установщику, но я не могу передать эти параметры в функцию Main (string [args]. Вот как я пытаюсь это сделать .... если есть лучший способсделайте то, что я делаю, пожалуйста, дайте мне знать

    protected override void OnAfterInstall(IDictionary savedState)
    {
        base.OnAfterInstall(savedState);
        string[] args = new string[2];
        args[0] = Context.Parameters["username"];
        args[0] = Context.Parameters["password"];
        new ServiceController(this.dataLoaderServiceInstaller.ServiceName).Start(args);
    }

, и это мой Program.cs

    static void Main(string[] args)
    {
        // create a writer and open the file
        TextWriter tw = new StreamWriter(@"c:\\bw\\date.txt");

        // write a line of text to the file
        tw.WriteLine(args.Length);

        // close the stream
        tw.Close();
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[] 
    { 
      new DataloaderService() 
    };
        ServiceBase.Run(ServicesToRun);
    }

длина составов, которые я пытаюсь написать, всегда равна нулю. Еще одинВопрос, будут ли эти параметры все еще существовать после перезагрузки компьютера / сервера для обслуживания? Заранее спасибо.:)

1 Ответ

2 голосов
/ 20 февраля 2011

Параметры, которые вы отправляете с помощью метода ServiceController.Start (), доступны вам в качестве параметров для метода OnStart ().Если я не ошибаюсь (это было давно, так как мне нужно было это сделать).

Подпись метода OnStart:

OnStart(string[] args)

Однако, если вам нужны параметры для отправкик сервису каждый раз, когда сервис запускается (автоматически) при загрузке, тогда вы должны посмотреть документацию MSDN по этому вопросу.В частности,

Обрабатывать аргументы инициализации для службы в методе OnStart, а не в методе Main.Аргументы в массиве параметров args могут быть установлены вручную в окне свойств для службы в консоли служб.Аргументы, введенные в консоли, не сохраняются;они передаются службе единовременно при запуске службы с панели управления.Аргументы, которые должны присутствовать при автоматическом запуске службы, могут быть помещены в строковое значение ImagePath для раздела реестра службы (HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \).Вы можете получить аргументы из реестра, используя метод GetCommandLineArgs, например: string [] imagePathArgs = Environment.GetCommandLineArgs ();.

http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.onstart.aspx

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