Ўстаноўка Windows Service створана ў Visual Studio

Калі я ствараю новую службу Windows у Visual Studio 2010, я атрымліваю паведамленне пра тое, каб выкарыстоўваць InstallUtil і чысты старт для запуску службы.

Я паспрабаваў наступныя крокі:

  1. Create new project File -> New -> Project -> Windows Service
  2. Project Name: TestService
  3. Build project as is (Service1 constructor, OnStart, OnStop)
  4. Open command prompt, run "C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" TestService.exe
  5. Run net start TestService.

<Моцны> Выхад кроку 4

<Р> Запуск транзакцыйнай ўстаноўкі.

     <Р> Пачынаючы з фазы ўстаноўкі Усталяваць.

     <Р> Глядзі змесціва файла часопіса для   C: \ Users \ MyUserName \ Documents \ Visual Studio   2010 \ Projects \ TestService \ TestService \ OBJ \ x86 \ Debug \ TestService.exe   Прагрэс зборкі.

     <Р> Файл знаходзіцца ў каталогу C: \ Users \ MyUserName \ Documents \ Visual Studio   2010 \ Праекты \ Дошкі   TService \ TestService \ OBJ \ x86 \ Debug \ TestService.InstallLog.

     <Р> Усталёўка зборкі «C: \ Users \ MyUserName \ Documents \ Visual Studio   2010 \ Projects \ ІСПЫТАЎ е р у \ TestService \ OBJ \ x86 \ Debug \ TestService.exe ».

     <Р> Закранутыя параметры:      <Р> logtoconsole =      <Р> = лог-файлаў C: \ Users \ MyUserName \ Documents \ Visual Studio   2010 \ Projects \ TestService \ T   estService \ OBJ \ x86 \ Debug \ TestService.InstallLog

     <Р> assemblypath = C: \ Users \ MyUserName \ Documents \ Visual Studio   2010 \ Projects \ TestServ лёд \ TestService \ OBJ \ x86 \ Debug \ TestService.exe

     <Р> Няма публічных мантажнікі з RunInstallerAttribute.Yes ня прыпісваць   можна знайсці ў C: \ Users \ Имя_пользователя \ Documents \ Visual Studio   2010 \ Projects \ TestService \ TestSe rvice \ OBJ \ x86 \ Debug \ TestService.exe   зборка.      <Р> Усталяваць этап завершаны паспяхова, і Commit фаза   пачатак.

     <Р> Глядзі змесціва файла часопіса для   C: \ Users \ MyUserName \ Documents \ Visual Studio   2010 \ Projects \ TestService \ TestService \ OBJ \ x86 \ Debug \ TestService.exe   Прагрэс зборкі.

     <Р> Файл знаходзіцца ў каталогу C: \ Users \ MyUserName \ Documents \ Visual Studio   2010 \ Праекты \ Дошкі   TService \ TestService \ OBJ \ x86 \ Debug \ TestService.InstallLog.

     <Р> Здзяйсненне зборка «C: \ Users \ MyUserName \ Documents \ Visual Studio   2010 \ Projects \ ІСПЫТАЎ е р у \ TestService \ OBJ \ x86 \ Debug \ TestService.exe ».

     <Р> Закранутыя параметры:      <Р> logtoconsole =      <Р> = лог-файлаў C: \ Users \ MyUserName \ Documents \ Visual Studio   2010 \ Projects \ TestService \ T   estService \ OBJ \ x86 \ Debug \ TestService.InstallLog

     <Р> assemblypath = C: \ Users \ MyUserName \ Documents \ Visual Studio   2010 \ Projects \ TestServ лёд \ TestService \ OBJ \ x86 \ Debug \ TestService.exe

     <Р> Няма публічных мантажнікі з RunInstallerAttribute.Yes ня прыпісваць   можна знайсці ў C: \ Users \ Имя_пользователя \ Documents \ Visual Studio   2010 \ Projects \ TestService \ TestSe rvice \ OBJ \ x86 \ Debug \ TestService.exe   зборка.      <Р> Выдаліць файл InstallState, таму што няма мантажнікаў.

     <Р> Commit фаза паспяхова завершана.

     <Р> транзакцыйнай ўстаноўкі завершана.

<Моцны> Выхад кроку 5

Імя службы з'яўляецца несапраўдным.

Дадатковая даведка даступная, увядзіце NET HELPMSG 2185.

117

6 адказы

Вам трэба адкрыць файл Service.cs у канструктару, пстрыкаем правай кнопкай мышы і выберыце меню опцыю «Дадаць праграму ўстаноўкі».

Ён не будзе ўсталёўваць прама з скрынкі ... вам трэба стварыць клас ўстаноўкі першым.

<Моцны> Некаторыя спасылкі на ўсталёўнік службы:

Як дадаць усталёўшчыкаў ў дадатак Service

Даволі стары ... але гэта тое, што я кажу:

службы Windows у C #: даданне ўсталёўшчыка (частка 3)

Робячы гэта, а ProjectInstaller.cs будзе аўтаматычна створаны. Затым вы можаце двойчы пстрыкнуць гэтага увядзіце дызайнер, і наладзіць кампаненты:

  • serviceInstaller1 валодае ўласцівасцямі самога сэрвісу: Апісанне , отображаемое_имя , ServiceName і < код> StartType з'яўляюцца найбольш важнымі.

  • serviceProcessInstaller1 мае гэта важная ўласцівасць :. <Код> Уліковы запіс , які з'яўляецца уліковы запіс, у якой служба будзе працаваць

Напрыклад:

this.serviceProcessInstaller1.Account = ServiceAccount.LocalSystem;
215
дададзена
Я атрымліваю тую ж памылку ў VS2013. Я праверыў спасылкі прадастаўленыя вамі, праверыць, што ў мяне ёсць ProjectInstaller, у тым ліку службы кампанентаў [працэс] Installer1, правільна настроены. Я бягу installutil.exe як адміністратар. Ён па-ранейшаму паведамляе «Няма публічных мантажнікі з атрыбутам RunInstallerAttribute.Yes не можа быць знойдзены». Любыя ідэі?
дададзена аўтар Barry Dysert, крыніца
Лол. Мне падабаецца, што «Даволі старая» спасылка на сайт пад назвай Arcane код. Чым старэй, што старонка становіцца, тым праўдзівей імя становіцца :-)
дададзена аўтар HotN, крыніца
Даданне ўстаноўкі і налады ўліковага запісу для LocalSystem зрабіў гэта. Дзякуй!
дададзена аўтар Luc, крыніца

Гледзячы на:

<Р> Няма публічных мантажнікі з RunInstallerAttribute.Yes ня атрыбут можа быць знойдзены ў C: \ Users \ Имя_пользователя \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestSe rvice \ OBJ \ x86 \ Debug \ TestService.exe зборкі

Падобна на тое, што вы не можаце мець клас ўстаноўкі ў вашым кодзе. Гэта клас, які атрымлівае ў спадчыну ад Усталёўшчык , які будзе сказаць InstallUtil як усталяваць свой выкананы файл у якасці службы.

P.s. I have my own little self-installing/debuggable Windows Service template here which you can copy code from or use: Debuggable, Self-Installing Windows Service

11
дададзена
Калі я правай кнопкай мышы праект TestService ў Visual Studio -> Уласцівасці -> Паслугі, старонка адключаная ... ты са спасылкай на іншае месца? Паводле заяўкі, імя зборкі TestService.
дададзена аўтар jkh, крыніца
@John: Ігнаруйце першую частку пра кансоль службаў, звярніце ўвагу на другой частцы, пачынаючы з <я> На самай справе . Падобна на тое, што сэрвіс не ўстаноўлены, так як ён не знайшоў ўстаноўкі.
дададзена аўтар James Michael Hare, крыніца

Вось альтэрнатыўны спосаб зрабіць ўсталёўнік і пазбавіцца ад гэтага паведамленні пра памылку. Акрамя таго, здаецца, што VS2015 экспрэс не мае «Add Installer» пункт меню.

Вам проста трэба стварыць клас і дадаць код, прыведзены ніжэй, і дадайце спасылку System.Configuration.Install.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);
        }
    }
}
8
дададзена
Запуск VS2015, а таксама і гэта рашэнне ў мяне міма «Няма публічных мантажнікаў з RunInstallerAttribute.Yes» паведамленне пра памылку, што я быў раней атрымліваць. Дзякуй!
дададзена аўтар PHBeagle, крыніца

Іншая магчымая праблема (якую я сутыкнуўся з):

Пераканайцеся, што ProjectInstaller клас публічны . Шчыра кажучы, я не ведаю, як менавіта я гэта зрабіў, але я дадаў апрацоўшчык падзей ProjectInstaller.Designer.cs , як:

<Код> this.serviceProcessInstaller1.BeforeInstall + = новы System.Configuration.Install.InstallEventHandler (this.serviceProcessInstaller1_BeforeInstall);

Я мяркую, што падчас аўтаматычнага працэсу стварэння функцыі апрацоўшчыка ў ProjectInstaller.cs ён змяніў вызначэнне класа з

<Код> клас ProjectInstaller грамадскасці: System.Configuration.Install.Installer

у

<Код> частковы клас ProjectInstaller: System.Configuration.Install.Installer

replacing the public keyword with partial. So, in order у fix it it must be

<Код> грамадскі частковы клас ProjectInstaller: System.Configuration.Install.Installer

Я выкарыстоўваю Visual Studio 2013 Community Edition.

3
дададзена

Два тыповых праблем:

  1. Адсутнічае клас ProjectInstaller (як @MiguelAngelo паказаў)
  2. Элемент <моцны> камандным радку павінен «Запуск ад імя <моцны> Адміністратар »
3
дададзена

<Моцны> Stealth Змены ў VS 2010 і .NET 4.0 і пазнейшыя версіі

No public installers with the RunInstallerAttribute.Yes attribute could be found

Існуе змена псеўданіма або кампілятар ачыстка ў .NET, якія могуць раскрыць гэтую маленькую Твік для вашага канкрэтнага выпадку.

Калі ў вас ёсць наступны код ...

RunInstaller(true)  //old alias  

Вы, магчыма, спатрэбіцца абнаўляць яго

RunInstallerAttribute(true) //new property spelling

Гэта як псеўданім змяніўся пад коўдрай падчас кампіляцыі або падчас выканання, і вы атрымаеце такія паводзіны памылкі. Вышэй відавочнае змяненне RunInstallerAttribute (сапраўднага) зафіксаваў яго ва ўсіх нашых сцэнарах ўстаноўкі на ўсіх машынах.

Пасля дадання праекта або службы ўстаноўкі праверце для «стары» RunInstaller (праўда) і змяніць яго на новы RunInstallerAttribute (праўда)

1
дададзена
Па маіх звестках вы можаце апусціць «атрыбут» суфікс, то ёсць [RunInstaller (ісціна)] і [RunInstallerAttribute (ісціна)] тое ж самае. Паспрабуйце яго з іншым атрыбутам, напрыклад, [DebuggerStepThrough ()] і [DebuggerStepThroughAttribute ()] - і будзе працаваць, калі яны ўжываюцца да класа.
дададзена аўтар Matt, крыніца