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"
Теперь можно запустить наш сервер и посмотреть результат его выполнения
Зайдите в "Панель управления -> Администрирование -> Службы". Найдите установленную вами службу и запустите её
Теперь можно открыть созданный файл и посмотреть результат работы нашей службы
Как видно служба прекрасно отрабатывает
Теперь остановите службу.
Также в логе службы мы можем просмотреть когда наша служба запускалась и останавливалась
Зайдите в "Панель управления -> Администрирование -> Просмотр событий -> Журнал приложений и служб".
Здесь мы можем увидеть когда наша служба запускалась и останавливалась
7 мая 2013 г.
C# Создание Windows Service
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий