Windows Service

Тема в разделе ".NET", создана пользователем Real-Mulik, 5 мар 2007.

Статус темы:
Закрыта.
  1. Real-Mulik

    Real-Mulik Гость

    в обработке события protected override void OnStart(string[] args) есть параметр.. по идее который должен хранить параметры для данной службы. Но на практике args.Length == 0. Т.е. в реестре прописана служба и запускаемый файл вот так:
    Код (Text):
    "...\Visual Studio 2005\Projects\service\service\bin\Debug\service.exe" /mail
    по сути в программу должен был передаться параметр mail... однако этого не происходит.. что за ... ?
     
  2. mr_ST

    mr_ST Гость

    Боюсь ошибиться, но /mail, случайно не внутри кавычек должен быть?
     
  3. Real-Mulik

    Real-Mulik Гость

    <!--QuoteBegin-mr_ST+5:03:2007, 15:14 -->
    <span class="vbquote">(mr_ST @ 5:03:2007, 15:14 )</span><!--QuoteEBegin-->Боюсь ошибиться, но /mail, случайно не внутри кавычек должен быть?
    [snapback]58247" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    пробывал.. он тогда вааще службу отказывается запускать. пишет что файл не найден.. я посмотрел в касперском ексешник запускается так же.. т.е. параметр вне ковычек и с таким слешем...
     
  4. Real-Mulik

    Real-Mulik Гость

    Рассказываю как это лечиться! Пользуется Visual Studia 2005. После создания службы по умолчанию формируется файл Pragramm.cs с примерным содержимым

    Код (Text):
    static void Main()
    {
    ServiceBase[] ServicesToRun;

    ServicesToRun = new ServiceBase[] { new MyService() };

    ServiceBase.Run(ServicesToRun);
    }
    добаляем ручками параметры в Main и в MyService string[] args. В результате несложных махинаций получаем:
    Код (Text):
    static void Main(string[] args)
    {
    ServiceBase[] ServicesToRun;

    ServicesToRun = new ServiceBase[] { new MyService(args) };

    ServiceBase.Run(ServicesToRun);
    }
    Теперь идем в код самой службы, т.е. во внутренности класса MyService и дописываем (переписываем каму как нравиться) конструктор.. в результате новый конструктор выглядит так:
    Код (Text):
    public MyService(string[] args)
    {
    Args = args;
    InitializeComponent();
    }
    где Args - заранее объявленный в этом классе объект
    string[] Args; //он то и хранит все параметры командной строки
     
  5. Real-Mulik

    Real-Mulik Гость

    Вопрос №2. Не про параметры, но про службы. Вернее про ее компаненты. Проблемв заключается в динамическом создании таймера.
    Сначала создается лист таймеров:

    Код (Text):
     private List<System.Windows.Forms.Timer> ListTimers = new List<System.Windows.Forms.Timer>();
    Потом на событии OnStart в цикле создаю и инициализирую таймеры.
    Код (Text):
    ListTimers.Add(new System.Windows.Forms.Timer(this.components));
    ListTimers[i].InitializeLifetimeService();
    ListTimers[i].Interval = 100;
    ListTimers[i].Tick += new EventHandler(Patcher_Tick);
    ListTimers[i].Enabled = true;
    ListTimers[i].Start();
    Все срабатывает без ошибок, но таймер не срабатывает.. Смотрел как студия автоматичкески делает идентификацию.. все тоже самое.. может кто знает ответ?
     
  6. mr_ST

    mr_ST Гость

    Если этот код в сервисе то он не будет работать по вполне понятным причинам. System.Threading.Timer спасет отца русской демократии ;)
     
  7. Real-Mulik

    Real-Mulik Гость

    <!--QuoteBegin-mr_ST+7:03:2007, 11:12 -->
    <span class="vbquote">(mr_ST @ 7:03:2007, 11:12 )</span><!--QuoteEBegin-->Если этот код в сервисе то он не будет работать по вполне понятным причинам. System.Threading.Timer спасет отца русской демократии
    [snapback]58434" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Во-во! Согласен. Студия заводит в заблуюжение... первы раз таймер брал из Toolbox из группы Components а потом обнаружил, что и в Forms и в Components один и тот же компанент. В 2003 этого безобразия не было.. вобщем "отца" спало следующее:
    кл. пр. клавишей миши по Toolbox и выбираем Choose Items... Там находим компанент Timer. ставим птичку и доавляем.
    Я пользовал динамическое добавление таймеров по аналогии с попровкой на немного другие свойства и методы ... вот код:
    Код (Text):
    //список таймеров
    private List<System.Timers.Timer> ListTimers = new List<System.Timers.Timer>();
    ....
    //Инициализация
    ....
    ListTimers.Add(new System.Timers.Timer());
    ((System.ComponentModel.ISupportInitialize)(ListTimers[i])).BeginInit();
    ListTimers[i].AutoReset = true;
    ListTimers[i].Interval = 1000;
    ListTimers[i].Elapsed += new System.Timers.ElapsedEventHandler(Patcher_Elapsed);
    ListTimers[i].Enabled = true;
    ((System.ComponentModel.ISupportInitialize)(ListTimers[i])).EndInit();
    ....
    вот и все...
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей