Установка службы Windows, созданной в Visual Studio
когда я создаю новую службу Windows в Visual Studio 2010, я получаю сообщение о том, чтобы использовать InstallUtil и net start для запуска службы.
Я попробовал следующие шаги:
- создать новый файл проекта - > создать - > проект - > служба Windows
- Имя Проекта: TestService
- построить проект как есть (конструктор Service1, OnStart, OnStop)
- Откройте командную строку, выполните "C:WindowsMicrosoft.NETFrameworkv4.0.30319InstallUtil.exe" Тестсервис.exe
- Run net start TestService.
вывод шага 4
выполнение операции установки.
начало этапа установки установки.
посмотреть содержимое файла журнала C:UsersmyusernameDocumentsVisual Студия Проекты2010службы testserviceслужбы testserviceпараметр objх86отладкислужбы testservice.исполняемый прогресс ассамблеи.
файл находится по адресу C:UsersmyusernameDocumentsVisual студия 2010ПроектыTes tServiceслужбы testserviceпараметр objх86отладкислужбы testservice.Installlog по.
установка сборки C:UsersmyusernameDocumentsVisual студия Проекты2010тестов поставщикслужбы testserviceпараметр objх86отладкислужбы testservice.exe.
пострадавших параметры:
logtoconsole =
logfile = C:UsersmyusernameDocumentsVisual студия Проекты2010Службы TestserviceТ estService папкеobjх86отладкислужбы testservice.Installlog по
assemblypath = C:UsersmyusernameDocumentsVisual студия 2010проектыTestServ ледслужбы testserviceпараметр objх86отладкислужбы testservice.exe
нет общедоступных установщиков с RunInstallerAttribute.Атрибут да можно найти в C:UsersmyusernameDocumentsVisual студия 2010ПроектыTestServiceTestSe рвыке папкеobjх86отладкислужбы testservice.исполняемый собрание.
фаза установки завершена успешно, и фаза фиксации начало.
посмотреть содержимое файла журнала C:UsersmyusernameDocumentsVisual Студия Проекты2010службы testserviceслужбы testserviceпараметр objх86отладкислужбы testservice.исполняемый прогресс ассамблеи.
файл находится по адресу C:UsersmyusernameDocumentsVisual студия 2010ПроектыTes tServiceслужбы testserviceпараметр objх86отладкислужбы testservice.Installlog по.
фиксация сборки 'C:UsersmyusernameDocumentsVisual студия Проекты2010тестов поставщикслужбы testserviceпараметр objх86отладкислужбы testservice.exe.
пострадавших параметры:
logtoconsole =
logfile = C:UsersmyusernameDocumentsVisual студия Проекты2010Службы TestserviceТ estService папкеobjх86отладкислужбы testservice.Installlog по
assemblypath = C:UsersmyusernameDocumentsVisual Студия 2010проектыTestServ ледслужбы testserviceпараметр objх86отладкислужбы testservice.exe
нет общедоступных установщиков с RunInstallerAttribute.Атрибут да можно найти в C:UsersmyusernameDocumentsVisual студия 2010проектыслужбы testserviceTestSe рвыке папкеobjх86отладкислужбы testservice.исполняемый собрание.
удалить файл InstallState, потому что нет монтажников.
фаза фиксации завершена успешно.
транзакционная установка завершена.
вывод шага 5
недопустимое имя службы.
дополнительная помощь доступна, набрав NET HELPMSG 2185.
6 ответов
вам нужно открыть службу.cs файл в конструкторе, щелкните его правой кнопкой мыши и выберите пункт меню "Добавить установщик".
он не будет устанавливаться прямо из коробки... сначала необходимо создать класс installer.
некоторые ссылки на установщик службы:
как: добавление установщиков в приложение-службу
довольно старый... но вот о чем я говорю:--10-->
окна Услуги в C#: добавление установщика (часть 3)
делая это, a ProjectInstaller.cs
будет автоматически создан. Затем вы можете дважды щелкнуть это, войти в конструктор и настроить компоненты:
serviceInstaller1
имеет свойства самого обслуживания:Description
,DisplayName
,ServiceName
иStartType
самые важные.serviceProcessInstaller1
это важное свойство:Account
это учетная запись, в которой служба будет бежать.
например:
this.serviceProcessInstaller1.Account = ServiceAccount.LocalSystem;
посмотреть:
нет общедоступных установщиков с RunInstallerAttribute.Да атрибут может быть найден в C:\Users\myusername\Documents\Visual студия 2010\проекты\службы testservice\TestSe рвыке папке\obj\х86\отладки\службы 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)
- на командная строка должны "работать как администратор"
еще одна возможная проблема (с которой я столкнулся):
убедитесь, что 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
to
partial class ProjectInstaller : System.Configuration.Install.Installer
замена the public
ключевое слово partial
. Итак, чтобы исправить это, оно должно быть
public partial class ProjectInstaller : System.Configuration.Install.Installer
я использую Visual Studio 2013 Community edition.
изменение Stealth в VS 2010 и .NET 4.0 и более поздних версиях
нет общедоступных установщиков с RunInstallerAttribute.Да атрибут может быть найден
в .NET есть изменение псевдонима или очистка компилятора, которые могут выявить эту небольшую настройку для вашего конкретного случая.
Если у вас есть следующий код ...
RunInstaller(true) // old alias
возможно, Вам потребуется обновить его до
RunInstallerAttribute(true) // new property spelling
это похоже на псевдоним, измененный под охватывает во время компиляции или во время выполнения, и вы получите эта ошибка. Вышеупомянутое явное изменение RunInstallerAttribute (true) исправило его во всех наших сценариях установки на всех машинах.
после добавления проекта или установщика службы проверьте наличие" старого " RunInstaller(true) и измените его на новый RunInstallerAttribute (true)