Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лр2_Сервис удаленного взаимодействия.doc
Скачиваний:
7
Добавлен:
13.08.2019
Размер:
680.45 Кб
Скачать

1.4.2.2. Метод OnStop()

С технической точки зрения класс CarService не требует никакой логики останова службы. В целях иллюстрации давайте отправим еще одно сообщение в EventLog, чтобы запротоколировать останов создаваемой службы Windows:

protected override void OnStop()

{

EventLog.WriteEntry("CarWinService", "CarWinService stopped",

EventLogEntryType.Information);

}

1.4.3. Создание инсталлятора службы

Прежде, чем можно будет инсталлировать службу на определенной машине, следует ввести дополнительный тип инсталлятора к текущему проекту CarWinService. В частности, любая служба Windows (написанная на .NET или Win32 API) требует нескольких записей в реестре для того, чтобы позволить операционной системе взаимодействовать с ней. Вместо того чтобы создавать эти записи вручную, можно просто добавить инсталлятор к проекту службы Windows, который корректно сконфигурирует сервис (службу) после установке его на целевой машине.

Чтобы добавить инсталлятор к проекту CarService, откройте в окне Solution Explorer редактор служб (двойным щелчком на файле CarService.cs), после этого щелкните правой клавишей мыши в любом месте дизайнера инсталлятора и выберите в контекстном меню (см. рис.2) пункт Add Installer (Добавить Инсталлятор).

В результате этих операций в проект сервиса будет добавлен новый элемент инсталлятора, унаследованного от базового класса System.Configuration.Install.Installer. В конструкторе инсталлятора будет находится два компонента. Один из них имеет тип serviceInstaller1 и представляет собой инсталлятор конкретной службы в проекте. Если курсором мыши выбрать эту пиктограмму и заглянуть в окно его свойств (Properties), то обнаружится, что свойство ServiceName было установлено в тип класса службы - CarService.

Второй компонент (serviceProcessInstaller1) позволяет установить идентичность (имя, идентификатор), под которой будет выполняться инсталлированная служба. По умолчанию свойство Account установлено в User. Используя окно Properties среды Visual Studio, измените это значение на LocalService (рис.4).

Рис. 4. Установка идентичности для CarService.

После компиляции проект службы будет готов к использованию.

1.6. Инсталляция службы CarService

Инсталляция CarService.exe на определенной машине (локальной или удаленной) требует выполнения двух шагов.

1. Перенос готовой сборки службы (и всех необходимых ей внешних сборок; в данном примере — CarGeneralAsm.dll) на удаленную машину.

2. Запуск инструмента командной строки installutil.exe с указанием службы в качестве аргумента. (Эту утилиту можно найти, например, в каталоге: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727)

Если первый шаг выполнен, откройте командное окно Visual Studio, перейдите к месту нахождения сборки CarWinService.exe и выполните следующую команду

installutil carwinservice.exe

Обратите внимание, что тот же инструмент может применяться и для деинсталляции службы, но уже с указанием аргумента /u, например, installutil /u carwinservice.exe). Проще всего это сделать, если разместить файлы CarGeneralAsm.dll, carwinservice.exe и installutil.exe в корне каталога, например, каталога d:\.

Как только служба Windows установлена, то можно запускать и конфигурировать ее в аплете Services (Службы) панели управления. Найдя CarService (рис.5), щелкните на ссылке Start (Запуск) для загрузки и запуска программы службы.

Рис.5. Аплет Services

То же самое можно сделать из среды Visual Studio в меню "Вид" выбрать пункт "Обозреватель серверов", в котором открыть папку "Серверы", а внутри нее – "Службы". Если установка службы прошла успешно, то в папке служб вы найдете свою службу "CarService " (рис.5). Если подвести курсор к папке "Службы" и нажать на правую клавишу мыши, то появиться то же самое окно для загрузки и запуска служб, показанное на рис.5.

Рис.5. Окно Visual Studio для просмотра служб, установленных на вашем компьютере.

В результате запуска сервиса CarService мы получаем службу, которая способна выполнять роль полноправного заменителя сервера удаленного объекта, не требующего запуска самого сервера в виде отдельного приложения (хоста).