Установка службы Windows, созданной в Visual Studio

когда я создаю новую службу Windows в Visual Studio 2010, я получаю сообщение о том, чтобы использовать InstallUtil и net start для запуска службы.

Я попробовал следующие шаги:

  1. создать новый файл проекта - > создать - > проект - > служба Windows
  2. Имя Проекта: TestService
  3. построить проект как есть (конструктор Service1, OnStart, OnStop)
  4. Откройте командную строку, выполните "C:WindowsMicrosoft.NETFrameworkv4.0.30319InstallUtil.exe" Тестсервис.exe
  5. 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);
        }
    }
}

две типичные проблемы:

  1. отсутствует класс ProjectInstaller (как указал @MiguelAngelo)
  2. на командная строка должны "работать как администратор"

еще одна возможная проблема (с которой я столкнулся):

убедитесь, что 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)