C# Создание Windows Service
Для создания сервиса использовалась среда Visual Studio 2010.
1. Откройте студию и создайте новый проект
2. Для того чтобы службу можно было установить необходимо добавить в проект installer.
В Sulution Explorer дважды щелкните по классу "Service1.cs", в появившемся окне щелкните правой кнопкой мыши и выберите "Add Installer". Появится новый класс "ProjectInstaller.cs" с двумя компонентами: "serviceProcessInstaller" и "serviceInstaller".
Установите свойства этих компонентов как показано на рисунках:
serviceProcessInstaller
serviceInstaller
Допустим нам необходимо чтобы наш сервис каждую секунду записывал строку в файл.
Для этого создадим отдельный поток который будет запускаться при старте сервиса в методе "OnStart". В данном котором будем производить запись в файл:
private readonly Thread workerThread; public Service1() { InitializeComponent(); workerThread = new Thread(DoWork); workerThread.SetApartmentState(ApartmentState.STA); }
В методе "DoWork" реализуем запись в файл:
private static void DoWork() { while (true) { string fname = @"c:\temp\temp.txt"; using (StreamWriter stream = new StreamWriter(fname, true)) { stream.WriteLine("Hello World!"); } // do some work, then Thread.Sleep(1000); } }
Теперь при старте сервера будем запускать поток, а при остановке сервера - останавливать поток:
protected override void OnStart(string[] args) { workerThread.Start(); } protected override void OnStop() { workerThread.Abort(); } }
Добавим также метод который будет записывать в лог нашего сервиса события запуска и остановки сервера:
public void AddLog(string log) { try { if (!EventLog.SourceExists("MyExampleService")) { EventLog.CreateEventSource("MyExampleService", "MyExampleService"); } eventLog1.Source = "MyExampleService"; eventLog1.WriteEntry(log); } catch { } }
И будем вызывать его при запуске и остановке сервера.
Полностью код будет выглядеть следующим образом
public partial class Service1 : ServiceBase { private readonly Thread workerThread; public Service1() { InitializeComponent(); workerThread = new Thread(DoWork); workerThread.SetApartmentState(ApartmentState.STA); } protected override void OnStart(string[] args) { AddLog("Service is started"); string fname = @"c:\temp\temp.txt"; using (StreamWriter stream = new StreamWriter(fname, true)) { stream.WriteLine("Служба запущена!"); } workerThread.Start(); } protected override void OnStop() { AddLog("Service is stopped"); string fname = @"c:\temp\temp.txt"; using (StreamWriter stream = new StreamWriter(fname, true)) { stream.WriteLine("Служба остановлена!"); } workerThread.Abort(); } public void AddLog(string log) { try { if (!EventLog.SourceExists("MyExampleService")) { EventLog.CreateEventSource("MyExampleService", "MyExampleService"); } eventLog1.Source = "MyExampleService"; eventLog1.WriteEntry(log); } catch { } } private static void DoWork() { while (true) { string fname = @"c:\temp\temp.txt"; using (StreamWriter stream = new StreamWriter(fname, true)) { stream.WriteLine("Hello World!"); } // do some work, then Thread.Sleep(1000); } } }
После того как сервис создан, его необходимо установить. В этом нам поможет утилита "installutil.exe", которая распространяется вместе с фраемворком.
Создайте батник со следующим содержимым
C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe E:\MyProjects\test\WindowsService1\WindowsService1\bin\Debug\WindowsService1.exe pause
здесь запускается утилита "installutil.exe", которой в качестве указывается наш сервис
запустите созданный батник из командной строки
если установка сервиса прошла успешно вы увидите сообщения:
"The Commit phase completed successfully".
"The transacted install has completed"
Теперь можно запустить наш сервер и посмотреть результат его выполнения
Зайдите в "Панель управления -> Администрирование -> Службы". Найдите установленную вами службу и запустите её

Теперь можно открыть созданный файл и посмотреть результат работы нашей службы

Как видно служба прекрасно отрабатывает
Теперь остановите службу.
Также в логе службы мы можем просмотреть когда наша служба запускалась и останавливалась
Зайдите в "Панель управления -> Администрирование -> Просмотр событий -> Журнал приложений и служб".
Здесь мы можем увидеть когда наша служба запускалась и останавливалась

Комментариев нет:
Отправить комментарий