Установка службы 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. выполнить 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 119

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);
        }
    }
}

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

  1. отсутствует класс ProjectInstaller (как указал @MiguelAngelo)
  2. 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)