Când am crea un nou Serviciu Windows în Visual Studio 2010, primesc mesaj de eroare pentru a utiliza fișierele installutil net și începe să curgă de la serviciu.
Am încercat următoarele etape:
Ieșire de pasul 4
Execută o tranzacționate de instalare.
Începutul Instala faza de instalare.
a se Vedea conținutul fișierului jurnal pentru C:\Users\myusername\Documents\Visual Studio 2010\Projects\TestService\TestService\obj\x86\Debug\TestService.exe adunarea's progres.
fișierul se află la C:\Users\myusername\Documents\Visual Studio 2010\Proiecte\Tes tService\TestService\ob\x86\Debug\TestService.InstallLog.
Instalarea de asamblare 'C:\Users\myusername\Documents\Visual Studio 2010\Proiecte\Teste ervice\TestService\ob\x86\Debug\TestService.exe'.
Afectați parametrii sunt:
logtoconsole =
logfile = C:\Users\myusername\Documents\Visual Studio 2010\Proiecte\TestService\T estService\ob\x86\Debug\TestService.InstallLog
assemblypath = C:\Users\myusername\Documents\Visual Studio 2010\Proiecte\TestServ ice\TestService\obj\x86\Debug\TestService.exe
Nu publice instalatori cu RunInstallerAttribute.Da atribut ar putea fi găsite în C:\Users\myusername\Documents\Visual Studio 2010\Proiecte\TestService\TestSe rvice\obj\x86\Debug\TestService.exe de asamblare.
Instalare fază finalizată cu succes, și Comite faza este începutul.
a se Vedea conținutul fișierului jurnal pentru C:\Users\myusername\Documents\Visual Studio 2010\Projects\TestService\TestService\obj\x86\Debug\TestService.exe adunarea's progres.
fișierul se află la C:\Users\myusername\Documents\Visual Studio 2010\Proiecte\Tes tService\TestService\ob\x86\Debug\TestService.InstallLog.
Comiterea de asamblare 'C:\Users\myusername\Documents\Visual Studio 2010\Proiecte\Teste ervice\TestService\ob\x86\Debug\TestService.exe'.
Afectați parametrii sunt:
logtoconsole =
logfile = C:\Users\myusername\Documents\Visual Studio 2010\Proiecte\TestService\T estService\ob\x86\Debug\TestService.InstallLog
assemblypath = C:\Users\myusername\Documents\Visual Studio 2010\Proiecte\TestServ ice\TestService\obj\x86\Debug\TestService.exe
Nu publice instalatori cu RunInstallerAttribute.Da atribut ar putea fi găsite în C:\Users\myusername\Documents\Visual Studio 2010\Proiecte\TestService\TestSe rvice\obj\x86\Debug\TestService.exe de asamblare.
Scoateți InstallState fișierul pentru că nu sunt instalatori.
faza Comite finalizat cu succes.
tranzacționate instalați-a finalizat.
Ieșire pas 5
Numele serviciului este invalid.
Mai de ajutor este disponibil de typing NET HELPMSG 2185.
Aveți nevoie pentru a deschide Servicii.cs fișier în designer, dați click dreapta și alegeți din meniu opțiunea "Adăugați Instalare".
Nu o't instala direct din cutie... aveți nevoie pentru a crea programul de instalare clasa întâi.
Unele trimitere la serviciul de instalare:
Cum să: Adauga Instalatori la Cererea de Servicii
Destul de vechi... dar asta este ceea ce vorbesc despre:
Servicii Windows în C#: Adăugarea de Instalare (partea 3)
De a face acest lucru, o ProjectInstaller.cs
va fi creat automat. Apoi, puteți face dublu clic pe acest lucru, introduceți designer, și configura componente:
serviceInstaller1
are proprietăți de serviciul în sine: Descriere
, DisplayName
, Numeserviciu " și " StartType
sunt cele mai importante.
serviceProcessInstaller1
are această proprietate importantă: "Cont" care este contul în care serviciul va rula.
De exemplu:
this.serviceProcessInstaller1.Account = ServiceAccount.LocalSystem;
Se uită la:
Nu publice instalatori cu RunInstallerAttribute.Da atribut poate fi găsit în C:\Users\myusername\Documents\Visual Studio 2010\Proiecte\TestService\TestSe rvice\obj\x86\Debug\TestService.exe de asamblare.
Se pare că nu poate avea o clasă de instalare în cod. Aceasta este o clasă care moștenește de la "Instalator", care va spune fișierele installutil` cum sa-ti instalezi executabil ca un serviciu.
P. s. Eu am propria mea pic de auto-instalarea/debuggable Serviciu Windows șablon de aici pe care le puteți copia codul de la sau de a folosi: Debuggable, Auto-Instalarea de Windows Service
Aici este o modalitate alternativă de a face programul de instalare și să scapi de acel mesaj de eroare. De asemenea, se pare că VS2015 express nu au "Adăugați Instalare" element de meniu.
Pur și simplu aveți nevoie pentru a crea o clasă și adăugați codul de mai jos și adăugați referință 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);
}
}
}
Două probleme tipice:
O altă posibilă problemă (pe care m-am întâlnit):
Asigurați-vă că ProjectInstaller clasa este "public". Pentru a fi sincer, eu nu sunt sigur exact cum am făcut-o, dar am adăugat stivuitoare eveniment să
ProjectInstaller.Designer.cs`, cum ar fi:
acest lucru.serviceProcessInstaller1.BeforeInstall += new System.De configurare.Instala.InstallEventHandler(acest lucru.serviceProcessInstaller1_BeforeInstall);
Cred că în timpul inițierii procesului de creare funcția handler în ProjectInstaller.cs
a schimbat definitia clasei de
public class ProjectInstaller : Sistemul.De configurare.Instala.Instalare
pentru a
parțială clasa ProjectInstaller : Sistemul.De configurare.Instala.Instalare`
înlocuirea "public" de cuvinte cheie cu "parțial". Deci, în scopul de a repara aceasta trebuie să fie
public partial class ProjectInstaller : Sistemul.De configurare.Instala.Instalare
Eu folosesc Visual Studio 2013 Community edition.
Stealth Schimba in VS 2010 și .NET 4.0 și mai Târziu
Nu publice instalatori cu RunInstallerAttribute.Da atribut ar putea fi găsit
Acolo este un alias schimba sau compiler cleanup .NET care ar putea dezvălui acest mic tweak pentru cazul dumneavoastră specific.
Dacă aveți codul de mai jos ...
RunInstaller(true) // old alias
Poate fi necesar să actualizați-l la
RunInstallerAttribute(true) // new property spelling
Este ca un alias schimbat sub capacele la compilare sau la execuție și veți obține acest lucru de eroare de comportament. Mai explicit schimba la RunInstallerAttribute(adevărat) fix în toate instala scenarii pe toate mașinile.
După ce adăugați proiect sau servicii de instalare, apoi verificați pentru "vechi" RunInstaller(adevărat) si schimba-l la noi RunInstallerAttribute(adevărat)
Încă o captură m-am întâlnit: asigura Instalare clasa derivată (de obicei `ProjectInstaller) este în partea de sus a nume ierarhie, am încercat să folosesc o clasă publică într-un alt public class, dar acest lucru duce la aceleași vechi eroare:
Nu publice instalatori cu RunInstallerAttribute.Da atribut ar putea fi găsit