Чтобы написать службу, необходим определенный опыт программирования.
Однако мои инструкции помогут даже новичкам.
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. Через опр.время должна появиться форма:
Однако мои инструкции помогут даже новичкам.
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. Через опр.время должна появиться форма:
Большое тебе спасибо автор!
ОтветитьУдалитьОчень помог с функцией "Разрешить взаимодействие с рабочим столом", т.е. с тем как программно его поставить.
ещё раз спасибо!
Кстати, приведенный в статье пример подходит для XP.
ОтветитьУдалитьДля Vista, Seven - подходит:
private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
{
ManagementObject wmiService = null;
ManagementBaseObject InParam = null;
try
{
wmiService = new ManagementObject(string.Format("Win32_Service.Name='{0}'",serviceInstaller1.ServiceName));
InParam = wmiService.GetMethodParameters("Change");
InParam["DesktopInteract"] = true;
wmiService.InvokeMethod("Change", InParam, null);
}
finally
{
if (InParam != null)
InParam.Dispose();
if (wmiService != null)
wmiService.Dispose();
}
}
мда....
ОтветитьУдалить1. куда что втыкать хрен рассказал.
2. Где исходник?
и для того, чтобы использовать "Path.getdirectoryname" необходимо подключать System.IO.
ОтветитьУдалитьЕсли начал писать статью, пиши полную а не выгрызки
Спасибо помог, с реестром у тебя не вышло потому что были ограничены права на изменения, там заморочки, начиная с win7
ОтветитьУдалить