воскресенье, 20 февраля 2011 г.

Visual Studio 2010 - создание службы Windows шаг за шагом

Чтобы написать службу, необходим определенный опыт программирования.
Однако мои инструкции помогут даже новичкам.

1.Открываем Visual Studio, создаем проект Windows Service.

2. На экране окажется пустой дизайнер. Переключимся в режим кода. Нажмем для этого правой кнопкой мыши и выберем View Code.

3. Окно уже будет содержать два обработчика события: OnStart и OnStop. Первый выполняется при запуске службы, второй при остановке. Также можно использовать другие обработчики событий: при выключении, при изменении статуса питания (для ноутбуков), пауза и восстановление и возможен перехват сессии.

4. В блок USING добавим ссылку на System.Threading.

5. Создадим новую процедуру которая будет выполняться при запуске службы. Назовем её MyProcess.

6. Необходимость в этом объясняется тем, что на каждое действие службы не должно уходить более 30сек даже не самом медленном компьютере. Поэтому я рекомендую в обработчике запуска службы создавать только новый поток и запускать его на выполнение. Все функциональность вкладывать в новый поток.

7. Напишем процедуру, которую будем выполнять в другом потоке. Например: Я хочу чтобы при старте сервис загружал RSS с lenta.ru и отображал его в гриде в окне.

8. Добавляем в службу Windows Form.


9. Кладем на форму DataGridView, устанавливаем свойство Anchor в Top, Bottom, Left, Right.


10. Устанавливаем у компонента DataGridView свойство Modifiers = Public.

11. Переходим в редактор кода службы и пишем следующий код:


12. Дописываем обработчик OnStart()


13. Переходим на дизайнер службы. Добавляем инсталер.


14. Выделяем ServiceProcessInstaller и меняем Account с User на LocalSystem


15. Значния ServiceInstaller ставим как на рисунке



16. Наша служба почти готова. С помощью ServiceProcessInstaller служба будет устанавливаться в систему. После этого она появится с списке служб.

17. Имейте в виду, чтобы служба могла взаимодействовать с пользователем, нужно чтобы была отмечена галочка "Разрешить взаимодействие с рабочим столом". По-умолчанию после установки службы - эта галочка всегда снята.


18. Сделаем это программно. Снова выделяем ServiceProcessInstaller, переходим к событиям. Находим там Commited и создаем для него обработчик события.


19. Добавим ссылку using System.Management;

20. Напишем следующий код:


21. Обратите внимание, я пробовал использовать прямой редактор реестра. Этот код закомментирован. Он не работает. Не используйте его. Вместо этого используйте ManagementObjectSearcher как показано выше

22. Собираем решение. F6.

23. Открываем папку с фрамеворком. Копируем оттуда файл InstalUtil.exe в папку с вашей службой.


24. Создаем пустой текстовый файл. Заполняем его следующим текстом:
InstallUtil.exe WindowsService1.exe

25. Сохраняем под именем Install.bat. (Чтобы можно было назначить тип файла, в свойствах папки должна стоять галочка, отображать имена для зарегистрированных типов файлов).

26. Создаем ещё один текстовый файл. Заполняем его следующим текстом:
InstallUtil.exe /U WindowsService1.exe

27. Сохраняем под именем Uninstall.bat.

28. Создаем ещё один текстовый файл. Заполняем его следующим текстом:
net start MyRSS

29. Сохраняем под именем Start.bat.

30. Создаем ещё один текстовый файл. Заполняем его следующим текстом:
net stop MyRSS

31. Сохраняем под именем Stop.bat.

32. Запускаем Install.bat
33. Запускаем Start.bat

34. Через опр.время должна появиться форма: