Создание службы VS2012 C#
Открываем VS2012. Меню Файл -> Создать -> Проект -> Шаблоны -> Visual C# -> Служба Windows.
Вводим имя и имя решения.
рис. 1
Далее в контекстном меню Свойства узла WindowsService1 в диалоговом окне выбираем вкладку Приложение. Для поля Автоматически запускаемый объект из выпадающего списка выбираем значение WindowsService1.Program. Остальное - по желанию.
рис. 2
Дважды щелкаем мышью по имени файла Servece1.cs в Обозревателе решений. Выставим свойства - (Name)- Service1, AutoLog - True.
рис. 3
Раскрываем узел Service1.cs, щелкаем по Service1. В основном окне проекта видим готовый шаблон сервиса. Класс Service1 содержит конструктор класса, функцию main и функции методов OnStart и OnStop.
рис. 4
Построим проект. Для этого жмем F6 или Построение -> Построить решение.
рис. 5
При попытке запуска нашего сервиса нажатием кнопки Запуск получаем такое окно:
рис. 6
Для того что бы наш сервис начал работать его надо установить, а для того что бы его установить, сервис должен иметь установщик.
Для добавления установщика опять дважды щелкаем на Servece1.cs и добавляем установщик.
рис. 7
Теперь в нашем проекте есть serviceProcessInstaller1 и serviceInstaller1. В serviceProcessInstaller1 поставим значение Account в LocalSystem. В serviceInstaller1 укажем имя сервиса и поставим StartType — Automatic.
рис. 8
рис. 9
Не забудьте выполнить Построение -> Построить решение или нажать F6.
Тут, собственно, и начинается самое интересное, из за чего было написано все предыдущее.
Чтобы установить сервис, нужно вызвать утилиту установки и передать параметром путь к нашему сервису.
Для этого можно создать install.bat такого вида:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe "C:\Users\vs2012\Documents\Visual Studio 2012\Projects\WindowsService1\WindowsService1\bin\Debug\WindowsService1.exe"
pause
После запуска этого файла с правами администратора в апплете Службы можно увидеть наш сервис.
рис. 10
В папке откуда запускался install.bat появится лог файл InstallUtil.InstallLog, а в папке проекта файл WindowsService1.InstallLog.
Если вы все сделали правильно, то WindowsService1.InstallLog будет содержать такие строки:
"Устанавливается служба Service1...
Служба Service1 успешно установлена."
В противном случае ищите ошибку в последовательности действий при создании сервиса.
Ну и создадим файл для удаления сервиса UnInstall.bat
C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe "C:\Users\vs2012\Documents\Visual Studio 2012\Projects\WindowsService1\WindowsService1\bin\Debug\WindowsService1.exe" /u
pause
В результате выполнения этого файла с правами администратора наша служба будет удалена из системы, а в файле WindowsService1.InstallLog появится запись:
"Выполняется удаление службы Service1 из системы...
Служба Service1 успешно удалена из системы."
Это легкий путь. Но, поскольку я поставил себе цель <> и легких путей не ищу, то попробую сделать инсталятор.
Для этого идем Файл -> Добавить -> Создать проект -> Другие типы проектов -> Установка и развертывание.
Не знаю у кого как, а у себя я увидел такую картинку:
рис. 11
При выборе Включение InstallShield Limited Edition и нажатии ОК вас перекинет на страницу C:\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\InstallShield\InstallShieldProject\1049\InstallShield_ult.html из которой будет предложено перейти на сайт загрузки.
После заполнения формы жмем кнопку Download и получаем установщик. Вам будет дан серийный номер для регистрации InstallShield Limited Edition у вас в системе. Одновременно на указанный при регистрации п/я придет письмо с серийным номером и ссылкой на скачивание.
После скачивания и установки InstallShield Limited Edition идем тем же путем Файл -> Добавить -> Создать проект -> Другие типы проектов -> Установка и развертывание. И теперь уже видим такую картинку
рис. 12
Выбираем InstallShield Limited Edition Projects, жмем Ок и попадаем в мастер.
На первом этапе будет предложено выбрать имя компании, название приложения, его версию и сайт компании производителя.
На втором этапе будет предложен выбор ОС для которых предназначено ваше приложение, а так же если хотите, то можете перед установкой выполнить проверку на предмет установленных в системе программ из списка.
Третий этап не доступен в InstallShield Limited Edition.
На четвертом этапе будет выведено дерево папок с предложением конечной папки для инсталляции вашего приложения. Так же можно выбрать и другие папки для установки. Для этого жмем правой кнопкой на любой из папок и выбираем Show Predefined Folder. Я досконально не разбирался почему в дереве создаются папки с именем введенной на первом этапе компании и почему эти папки нельзя удалить даже если я буду инсталлировать свое приложение в другую папку. Думаю, что это ограничение InstallShield Limited Edition.
Тем не менее я добавлю папку [SystemFolder] и именно в нее установлю нашу службу. Для этого жмем правой кнопкой на любой из папок и выбираем Show Predefined Folder. Ставим галку напротив [SystemFolder]. Папка появляется в дереве. Становимся на нее.
рис. 13
Жмем кнопку Add Projects Output и в открывшемся окне ставим галку на Основные выходные файлы.
Видим такую картинку:
рис. 14
рис. 15.
Переходим к пятому этапу, на котором будет предложено создать ярлыки. Я это ненавижу в установщиках, поэтому игнорирую.
На шестом этапе будет предложено внести изменения в реестр. В данном случае это не требуется.
На седьмом, последнем этапе будет предложено выбрать файл лицензии для устанавливаемого приложения. У меня такого нет, поэтому пропускаю.
В результате работы мастера мы получаем вот такое окно:
рис. 16.
Для того что бы создать инсталлятор становимся на узел Setup1, жмем правой кнопкой и выбираем Построение.
рис. 17.
И тут нас ждет разочарование. В виде сообщения об ошибке -5036: Internal build error ISEXP : error : -5036: Internal build error
рис. 18
Путем рыскания по интернет находим решение.
Раскрываем узел под номером 2, становимся на Files и жмем не нем два раза мышью. В Disanation Computer Folder идем к нашим файлам в папке SystemFolder жмем правой кнопкой на имени файла, выбираем Properties. На закладке Com & .NET Setting ставим галку Installer Class. Жмем Применить.
рис. 19.
Идем в Построение -> Диспетчер конфигураций
рис. 20
В таблице напротив имени нашего установщика выбираем CD-ROM.
рис. 21
После этого опять становимся на узел Setup1, жмем правой кнопкой и выбираем Построение. Наш инсталятор готов!
Теперь можно инсталлировать наш сервис в систему. Жмем правой кнопкой на узел Setup1 и выбираем Install. Запустится мастер установки нашего сервиса. Не смотря на то, что инсталятор говорит, что приложение будет установлено в C:\Programm Files\Имя компании\Имя продукта, приложение ставится в System32, т.е. туда, куда я и хотел его установить.
Сами же файлы установки были созданы в C:\Users\vs2012\Documents\Visual Studio 2012\Projects\WindowsService1\Setup1\Setup1\Express\CD_ROM\DiskImages\DISK1
Вот и все. Статья написана больше для того, что бы самому не забыть, как сделать шаблон сервиса и установщика. Если кому то поможет буду только рад.
Были использованы материалы из статей http://habrahabr.ru/post/102826/ http://wladm.narod.ru/C_Sharp/services.html http://stackoverflow.com/questions/11994725/how-do-i-create-an-installshield-le-project-to-install-a-windows-service