Коды обработчиков событий запишем следующим образом:
protected override void OnStart(string[] args)
{
//Файл по умолчанию будет создан в "C:\Winnt\System32\"
file = new StreamWriter(new FileStream("MyFirstService.log",
System.IO.FileMode.Append ));
this.file.WriteLine("MyFirstService стартовал");
this.file.Flush();
}
protected override void OnStop()
{
this.file.WriteLine("MyFirstService остановлен");
this.file.Flush();
this.file.Close();
}
Позже мы добавим нашему сервису другую функциональность.
В начало
Параграф 3. Создание установщиков для службы
На вкладке Service1.cs [Design] вызываем вновь
контекстное меню и пункт Add Instaler. В проект добавляется класс
компонента, содержащий два установщика:
- ProjectInstaller - для установки службы и
- ServiceInstaller - для установки связанного со службой процесса.
Для ServiceInstaller1 отображаем его свойства (контекстное
меню Properties) и задаем:
- ServiceName - MyFirstService,
- ServerType - Automatic.
Для 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 времени.
namespace MyFirstService
{
public class Service1 : ServiceBase
{
private StreamWriter file;
//Определяем таймер
private System.Timers.Timer timer1;
......
protected override void OnStart(string[] args)
{
file = new StreamWriter(new FileStream("Service1.log",
System.IO.FileMode.Append ));
this.file.WriteLine("MyFirstService стартовал");
this.file.Flush();
//Создаем таймер и выставляем его параметры
this.timer1 = new System.Timers.Timer();
this.timer1.Enabled = true;
//Интервал 10000мс - 10с.
this.timer1.Interval = 100000;
this.timer1.Elapsed +=
new System.Timers.ElapsedEventHandler(this.timer1_Elapsed);
this.timer1.AutoReset=true;
this.timer1.Start();
}
protected override void OnStop()
{
this.timer1.Stop();
this.file.WriteLine("MyFirstService остановлен");
this.file.Flush();
this.file.Close();
}
private void
timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//Записываем время в файл или делаем все, что хотим
this.file.WriteLine(DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss"));
this.file.Flush();
}
Содержимое файла Service1.log:
MyFirstService стартовал
21.06.2005 15:01:59
21.06.2005 15:02:09
21.06.2005 15:02:19
21.06.2005 15:02:29
MyFirstService остановлен
Молчанов Владислав 21.06.2005г.
Адаптировано к VS 2005 16.04.2008г.
Проверено в VS 2010 8.09.2011г.
Еcли Вы пришли с поискового сервера - посетите мою главную страничку
На главной странице Вы найдете программы комплекса Veles - программы для автолюбителей,
программы из раздела графика - программы для работы с фото, сделанными цифровым фотоаппаратом,
программу Bricks - игрушку для детей и взрослых, программу записную книжку,
программу TellMe - говорящий Русско-Английский разговорник - программу для тех, кто собирается
погостить за бугром или повысить свои знания в английском, теоретический материал
по программированию в среде Borland C++ Builder, C# (Windows приложения и ASP.Net Web сайты).
На главную страницу
В начало страницы, главы и раздела
К началу книги