Установка службы Windows, созданной в Visual Studio
когда я создаю новую службу Windows в Visual Studio 2010, я получаю сообщение о том, чтобы использовать InstallUtil и net start для запуска службы.
Я пробовал следующие действия:
- создать новый файл проекта -> Новый -> проект - > служба Windows
- Имя Проекта: TestService
- построить проект как есть (конструктор Service1, OnStart, OnStop)
- открыть командную строку, запустить "C:WindowsMicrosoft.NETFrameworkv4.0.30319InstallUtil.exe" Тестсервис.exe
- выполнить net start TestService.
вывод шага 4
выполнение операции установки.
начало этапа установки установки.
посмотреть содержимое файла журнала C:UsersmyusernameDocumentsVisual Студия Проекты2010службы testserviceслужбы testserviceпараметр objх86отладкислужбы testservice.исполняемый прогресс ассамблеи.
файл находится по адресу C:UsersmyusernameDocumentsVisual студия 2010ПроектыTes tServiceTestServiceobjx86DebugTestService.InstallLog.
установка сборки 'C:UsersmyusernameDocumentsVisual студия Проекты2010тестов поставщикслужбы testserviceпараметр objх86отладкислужбы testservice.exe'.
пострадавших параметры:
logtoconsole =
logfile = C:UsersmyusernameDocumentsVisual студия 2010ПроектыTestServiceT estServiceobjx86DebugTestService.InstallLog
assemblypath = C:UsersmyusernameDocumentsVisual студия 2010проектыTestServ ледслужбы testserviceпараметр objх86отладкислужбы testservice.exe
нет общедоступных установщиков с атрибутом RunInstallerAttribute.Да атрибут может быть найден в C:UsersmyusernameDocumentsVisual студия 2010ПроектыTestServiceTestSe rviceobjx86DebugTestService.исполняемый собрание.
этап установки завершен успешно, и этап фиксации начало.
посмотреть содержимое файла журнала C:UsersmyusernameDocumentsVisual Студия Проекты2010службы testserviceслужбы testserviceпараметр objх86отладкислужбы testservice.исполняемый прогресс ассамблеи.
файл находится по адресу C:UsersmyusernameDocumentsVisual студия 2010ПроектыTes tServiceTestServiceobjx86DebugTestService.InstallLog.
фиксация сборки 'C:UsersmyusernameDocumentsVisual студия Проекты2010тестов поставщикслужбы testserviceпараметр objх86отладкислужбы testservice.exe'.
пострадавших параметры:
logtoconsole =
logfile = C:UsersmyusernameDocumentsVisual студия 2010ПроектыTestServiceT estServiceobjx86DebugTestService.InstallLog
путь_сборки = C:UsersmyusernameDocumentsVisual Студия 2010проектыTestServ ледслужбы testserviceпараметр objх86отладкислужбы testservice.exe
нет общедоступных установщиков с атрибутом RunInstallerAttribute.Да атрибут может быть найден в C:UsersmyusernameDocumentsVisual студия 2010проектыслужбы testserviceTestSe рвыке папкеobjх86отладкислужбы testservice.исполняемый собрание.
удалить файл InstallState, потому что нет монтажников.
фаза фиксации завершена успешно.
транзакционная установка завершена.
вывод шага 5
недопустимое имя службы.
дополнительная помощь доступна, набрав NET HELPMSG 2185.
6 ответов:
вам нужно открыть сервис.cs файл в конструкторе, щелкните его правой кнопкой мыши и выберите пункт меню "Добавить установщик".
он не будет устанавливать прямо из коробки... сначала необходимо создать класс установщика.
некоторые ссылки на установщик службы:
как добавить установщиков в приложение-службу
довольно старый... но вот о чем я говорю:
Windows Услуги в C#: добавление установщика (часть 3)
делая это, a
ProjectInstaller.cs
будет автоматически создан. Затем вы можете дважды щелкнуть это, войти в конструктор и настроить компоненты:
serviceInstaller1
имеет свойства самого обслуживания:Description
,DisplayName
,ServiceName
иStartType
самые важные.
serviceProcessInstaller1
это важное свойство:Account
это учетная запись, в которой служба будет бежать.например:
this.serviceProcessInstaller1.Account = ServiceAccount.LocalSystem;
посмотреть:
нет общедоступных установщиков с атрибутом RunInstallerAttribute.Да атрибут может быть найден в C:\Users\myusername\Documents\Visual Studio 2010\Projects\TestService\TestSe rvice\obj\x86\Debug\TestService.exe сборки.
похоже, что у вас может не быть класса установщика в коде. Это класс, который наследует от
Installer
Что скажетinstallutil
Как установить исполняемый файл в качестве службы.P. s. у меня есть мой собственный небольшой самоустанавливающийся / отлаживаемый шаблон службы Windows, из которого вы можете скопировать код или использовать:Отлаживаемая, Самоустанавливающаяся Служба Windows
вот альтернативный способ сделать установщик и избавиться от этого сообщения об ошибке. Также кажется, что VS2015 express не имеет пункта меню "Добавить установщик".
вам просто нужно создать класс и добавить ниже код и добавить систему ссылок.Конфигурация.Установить.файл DLL.
using System.Configuration.Install; using System.ServiceProcess; using System.ComponentModel; namespace SAS { [RunInstaller(true)] public class MyProjectInstaller : Installer { private ServiceInstaller serviceInstaller1; private ServiceProcessInstaller processInstaller; public MyProjectInstaller() { // Instantiate installer for process and service. processInstaller = new ServiceProcessInstaller(); serviceInstaller1 = new ServiceInstaller(); // The service runs under the system account. processInstaller.Account = ServiceAccount.LocalSystem; // The service is started manually. serviceInstaller1.StartType = ServiceStartMode.Manual; // ServiceName must equal those on ServiceBase derived classes. serviceInstaller1.ServiceName = "SAS Service"; // Add installer to collection. Order is not important if more than one service. Installers.Add(serviceInstaller1); Installers.Add(processInstaller); } } }
две типичные проблемы:
- отсутствует класс ProjectInstaller (как указал @MiguelAngelo)
- The командная строка должны "работать как администратор"
еще одна возможная проблема (с которой я столкнулся):
будьте уверены, что
ProjectInstaller
классpublic
. Честно говоря, я не уверен, как именно я это сделал, но я добавил обработчики событийProjectInstaller.Designer.cs
, например:
this.serviceProcessInstaller1.BeforeInstall += new System.Configuration.Install.InstallEventHandler(this.serviceProcessInstaller1_BeforeInstall);
Я думаю, во время автоматического процесса создания функции обработчика в
ProjectInstaller.cs
Он изменил определение класса от
public class ProjectInstaller : System.Configuration.Install.Installer
до
partial class ProjectInstaller : System.Configuration.Install.Installer
замена the
public
ключевое словоpartial
. Итак, чтобы исправить это, он должен быть
public partial class ProjectInstaller : System.Configuration.Install.Installer
я использую Visual Studio 2013 Community edition.
изменение скрытности в VS 2010 и .NET 4.0 и более поздних версиях
нет общедоступных установщиков с атрибутом RunInstallerAttribute.Да атрибут может быть найден
в .NET есть изменение псевдонима или очистка компилятора, которые могут выявить эту небольшую настройку для вашего конкретного случая.
Если у вас есть следующий код ...
RunInstaller(true) // old alias
возможно, Вам потребуется обновить его до
RunInstallerAttribute(true) // new property spelling
это похоже на псевдоним, измененный под охватывает во время компиляции или во время выполнения, и вы получите эта ошибка. Приведенное выше явное изменение RunInstallerAttribute (true) исправило его во всех наших сценариях установки на всех машинах.
после добавления установщика проекта или службы проверьте наличие "старого" RunInstaller (true) и измените его на новый RunInstallerAttribute(true)