Створення windows c # служб (сервісів)

Глава 1. Створити сервіс це просто

Служби Windows (Windows NT services) - процеси, що володіють уніфікованим інтерфейсом для взаємодії з операційними системами Windows серії NT. Служби діляться на два типи - служби Win32, які взаємодіють з операційною системою за допомогою диспетчера управління службами (Service Control Manager - SCM), і драйвера, що працюють по протоколу драйвера пристрою (далі мова йде про службах Win32). Служби працюють у фоновому режимі, і їх робота прихована від користувача. В силу цього вони ідеально підходять для реалізації серверних процесів в архітектурі клієнт-сервер, мережевих служб, програм моніторингу та спорадично виконуваних програм.

Для створення служби в VS .NET необхідно виконати:
Створити проект рішення служби за допомогою спеціального шаблону Visual C # Projects - Windows Service.
  • Написати функціональний код і код подій OnStart і OnStop.
  • Створити установники для служби (ProjectInstaller - для установки процесу і ServiceInstaller - для служби або служб проекту).
  • Створити виконуваний файл.
  • Створити проект установки.
  • Встановити і активізувати службу.

  • Параграф 1. Створення проекту служби

    В меню File VS .NET вибераем New і Project. У діалоговому вікні New Project Project Types вибираємо Visual C # Projects, Template - Windows Service, задаємо Name, наприклад, MyFirstServicee, Location - визначаємо директорію, де будемо формувати проект.

    Файл AssemblyInfo.cs "переїхав" в папку Properties.

    Рис.1. Створення проекту рішення служби

    На даному етапі нас цікавить файл з ім'ям Service1.cs. Service - ім'я класу проекту, спадкоємця класу System.ServiceProcess.ServiceBase.

    Клас містить конструктор класу, функцію main і функції методів OnStart і OnStop. Методи OnPause (), і OnContinue () також можуть бути включені в проект (їх код може бути дописаний вручну, але методи не є обов'язковими).

    У контекстному меню дизайнера форми (вкладка проекту Service1.cs [Design], правий клік мишки) вибираємо пункт Properties (якщо вкладка не видно - двічі кликнемо мишкою по імені файлу Servece1.cs в Solutation Explorer). Встановлюємо властивості (Рис.2.):
    - ServiceName (ім'я проекту) - MyFirstService,
    - AutoLog - True.

    Рис.2. Установка властивостей сервісу

    Тут можна змінити і коротке ім'я сервісу (властивість ServiceName).

    На цьому проект рішення сервісу створений.

    Параграф 2. Написання функціонального коду сервісу

    Для того, щоб переконатися в працездатності нашого сервісу, покладемо на нього завдання писати в певний лог файл якусь інформацію при старті і зупинці. Для цього:
    Додамо простір імен:
  • Оголосимо в класі Service1 StreamWriter:
  • Коди обробників подій запишемо наступним чином:

    Пізніше ми додамо нашого сервісу іншу функціональність.

    Параграф 3. Створення установників для служби

    На вкладці Service1.cs [Design] викликаємо знову контекстне меню і пункт Add Instaler. У проект додається клас компонента, що містить два установника:
    - ProjectInstaller - для установки служби і
    - ServiceInstaller - для установки пов'язаного зі службою процесу.

    Для ServiceInstaller1 відображаємо його властивості (контекстне меню Properties) і задаємо:
    - ServiceName - MyFirstService,
    - ServerType - Automati c.

    Для ServiceProcessInstaller1 встановлюємо значення Account в LocalSystem (Рис.3.).

    Рис.3. Створення установника для служби

    Параграф 4. Створення виконуваного файлу для служби

    У Solution Explorer вибираємо пункт Properties для вузла MyFirstServices. У діалоговому вікні вибираємо вкладку Application. Для пункту Startup object вибираємо в випадаючому списку MyFirstService.Programm (Рис.4.).

    Рис.4. Установка властивостей для програми установки

    У контекстному меню для вузла MyFirstServices вибираємо пункт Build. Після цього, проект побудований і в директорії проекту obj \ debug або obj \ release буде сформований файл MyFirstService.exe. Однак, спроба його запуску призведе до видачі повідомлення (Рис.5.):

    Рис.5. Необхідність установки сервісу

    Параграф 5. Створення проекту установки для служби

    В меню File вибираємо пункт Add Project і New Project. У діалоговому вікні Add New Project у вікні Project Types вибираємо вкладку Other Project Types гілка Setup and Deployment, у вікні Templates - Setup Project, задаємо Name і Location - обидва параметри непринципові (Рис.6.).

    Рис.6. Додавання проекту рішення установки служби

    Проект установки доданий в рішення і ми його бачимо в Solutation Explorer.

    Крім того на вкладці File System (FirstServices) ми можемо бачити збірку файлів для установки "File System on Target Machine" (Рис.7.).

    Рис.7. Створення проекту рішення установки служби

    Наступне, що потрібно зробити - це визначити для установки директорію для проекту служби Windows.

    Вибираємо вузол File System on Target Machine (якщо по якійсь причині ми не бачимо дерево папок, то можна його відобразити через контекстне меню вузла FirstServices, пункт View / File System), в його контекстному меню вибираємо Add Special Folder і System Folder. Ім'я System Folder з'явилося в галузі вузла File System on Target Machine.

    У контекстному меню System Folder обираємо Add, Project Output \ Primary Output (Рис.8.).

    Рис.8. Визначення директорії для служби

    Вибираємо пункт View для вузла FirstServices пункт Custom Action, зліва у вікні відкриються за замовчуванням чотири можливих дії для інсталятора: Install, Commit, Rollback і Uninstall. Для Install і Uninstall через їх контекстне меню виконуємо пункт Add Custom Action і вказуємо System Folder (Рис.9.).

    Рис.9. Визначення дій інсталятора

    Практично, ми визначили не тільки дію, але і об'єкт цієї дії - Primary output from MyFirstService (Active). В дані вузли призначених для користувача дій (Install і Uninstall) буде додано основний вихідний файл проекту. У властивостях можна змінити для файлу CustomInstaller, значення true повідомляє інсталятору, що використовується клас інсталятора (Рис.10.).

    Рис.10. Визначення дій інсталятора

    Тепер можна побудувати проект інсталятора, викликавши для вузла FirstServices в Solutation Explorer пункт Build.

    Параграф 6. Установка, активізація і видалення служби

    Для установки служби в Solutation Explorer вибираємо проект установки (FirstServices) і в контекстному меню пункт Install. В результаті, буде запущений Setup Wizard. На другому кроці його роботи задамо системну папку Windows - C: \ WINDOWS \ system32 \. Після закінчення роботи Setup Wizard служба буде встановлена.

    Щоб запустити і зупинити службу відкриємо диспетчер управління службами (в Windows XP - Start / Programm / Administrative Tools / Services). Ім'я нашої служби MyFirstService буде відображено у вікні Services, і можна звичайним чином запустити наш сервіс через контекстне меню пункт Start (крім того, служба автоматично буде запускатися при перевантаженні комп'ютера).

    Наш сервіс (служба) створив файл Service1.log в "C: \ windows \ System32 \ і виконав в нього запис про своє старті. При зупинці сервісу запис буде виконана знову.

    Службу можна встановлювати і видаляти, використовуючи файли setup.exe і FirstServices.msi, які після побудови установника знаходяться в каталозі, де був створений проект інсталятора В даному прикладі в C: \. \ FirstService \ Debug \ і, крім того, цих двох файлів досить для установки служби з будь-якої директорії будь-якого комп'ютера.

    На даному етапі ми виконали всі необхідні кроки і перевірили нашу службу в роботі. Далі, можна виконати побудову проекту в режимі Release (меню Build, Configuration Manager, Release). setup.exe і FirstServices.msi, після побудови установника будуть знаходяться в каталозі C: ​​\. \ FirstServices \ bin \ Release). Далі можливо наповнювати функціональність служби на свій розсуд.

    Видалення сервісу з комп'ютера виконується як і звичайного застосування Windows - (Settings / Control Panel / Add on Remove Programs).

    Параграф 7. Приклад використання служби, для періодичного виконання деяких дій

    Для завдання простого механізму опитування можна скористатися компонентом System.Timers.Timer. У методі OnStart можна задати параметри компонента. Таймер буде виконувати в коді періодично деякі дії (наприклад, запис у файл поточного часу, як це показано нижче). У код лише доданий компонент Timer і обробник події, що виконує деякі дії після закінчення заданого властивістю timer1.Interval часу.

    Вміст файлу Service1.log:

    Еcли Ви прийшли з пошукових машин - відвідайте мою головну сторінку

    На головній сторінці Ви знайдете програми комплексу Veles - програми для автолюбителів, програми з розділу графіка - програми для роботи з фото, зробленими цифровим фотоапаратом, програму Bricks - іграшку для дітей і дорослих, програму записну книжку, програму TellMe - говорить Російсько-Англійський розмовник - програму для тих, хто збирається погостювати за бугром або підвищити свої знання в англійській, теоретичний матеріал по програмуванню в середовищі Borland C ++ Builder, C # (Windows додатки і ASP.Net Web сайти).

    Сайт управляється системою uCoz

    Схожі статті