2011-10-27 12 views
112

Po utworzeniu nowej usługi systemu Windows w programie Visual Studio 2010 otrzymuję komunikat z informacją, że należy użyć polecenia InstallUtil i net start, aby uruchomić usługę.Zainstaluj usługę systemu Windows utworzoną w programie Visual Studio

Próbowałem następujące kroki:

  1. Utwórz nowy projekt File -> New -> Project -> Windows Usługa
  2. Nazwa projektu: TestService
  3. projekt
  4. Zbuduj jak jest (konstruktora Service1, OnStart , OnStop)
  5. Otwórz wiersz polecenia, uruchom "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ InstallUtil.exe" TestService.exe
  6. Run net start TestService.

Wyjście z etapu 4

Prowadzenie wolumeny transakcji instalację.

Rozpoczęcie fazy instalacji instalacji.

zobaczyć zawartość pliku dziennika dla C: \ Users \ MyUserName \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestService \ obj \ x86 \ postęp Debug \ TestService.exe Zgromadzenia.

Plik znajduje się w katalogu C: \ Users \ mojanazwa \ Documents \ Visual Studio 2010 \ Projects \ Tes tService \ TestService \ obj \ x86 \ Debug \ TestService.InstallLog.

Instalowanie zestawu "C: \ Users \ mysername \ Documents \ Visual Studio 2010 \ Projects \ TestS ervice \ TestService \ obj \ x86 \ Debug \ TestService.exe".

Dotknięte parametry:

logtoconsole =

logfile = C: \ Users \ mojanazwa \ Documents \ Visual Studio 2010 \ Projects \ TestService \ T estService \ obj \ x86 \ Debug \ TestService. InstallLog

assemblypath = C: \ Users \ mojanazwa \ Documents \ Visual Studio 2010 \ Projects \ TestServ lód \ TestService \ obj \ x86 \ Debug \ TestService.exe

Żadnych publicznych instalatorów z atrybutem RunInstallerAttribute.Yes można znaleźć w zestawie C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestSe rvice \ obj \ x86 \ Debug \ TestService.exe .

Faza instalacji zakończona pomyślnie, a faza zatwierdzenia rozpoczyna się .

zobaczyć zawartość pliku dziennika dla C: \ Users \ MyUserName \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestService \ obj \ x86 \ postęp Debug \ TestService.exe Zgromadzenia.

Plik znajduje się w katalogu C: \ Users \ mojanazwa \ Documents \ Visual Studio 2010 \ Projects \ Tes tService \ TestService \ obj \ x86 \ Debug \ TestService.InstallLog.

Zatwierdzenie złożenia "C: \ Users \ mysername \ Documents \ Visual Studio 2010 \ Projects \ Tests ervice \ TestService \ obj \ x86 \ Debug \ TestService.exe".

Dotknięte parametry:

logtoconsole =

logfile = C: \ Users \ mojanazwa \ Documents \ Visual Studio 2010 \ Projects \ TestService \ T estService \ obj \ x86 \ Debug \ TestService. InstallLog

assemblypath = C: \ Users \ mojanazwa \ Documents \ Visual Studio 2010 \ Projects \ TestServ lód \ TestService \ obj \ x86 \ Debug \ TestService.exe

Żadnych publicznych instalatorów z atrybutem RunInstallerAttribute.Yes można znaleźć w zestawie C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestSe rvice \ obj \ x86 \ Debug \ TestService.exe .

Usuń plik InstallState, ponieważ nie ma instalatorów.

Faza zatwierdzenia zakończyła się pomyślnie.

Zakończono instalację transakcyjną.

Wyjście z etapu 5

Nazwa usługi jest nieprawidłowa.

Więcej pomoc jest dostępna wpisując NET helpmsg 2185.

Odpowiedz

209

Musisz otworzyć plik Service.cs w projektancie, kliknij go prawym przyciskiem myszy i wybierz opcję menu "Dodaj instalatora".

Nie będzie instalowany od razu po wyjęciu z pudełka ... musisz najpierw utworzyć klasę instalatora.

Niektóre odniesienia na instalatora usług:

How to: Add Installers to Your Service Application

dość stary ... ale to jest to, co mówię:

Windows Services in C#: Adding the Installer (part 3)

Robiąc tego, ProjectInstaller.cs zostanie automatycznie utworzone. Następnie można kliknąć dwukrotnie ten, wprowadź projektanta i skonfigurować składniki:

  • serviceInstaller1 ma właściwości samego usługę: Description, DisplayName, ServiceName i StartType są najważniejsze.

  • serviceProcessInstaller1 ma tę ważną właściwość: Account thas to konto, na którym usługa będzie działać.

Na przykład:

this.serviceProcessInstaller1.Account = ServiceAccount.LocalSystem; 
+3

Zrobiłem to, dodając instalator i ustawienie konta do LocalSystem. Dzięki! – Luc

+0

Otrzymuję ten sam błąd w VS2013. Sprawdziłem podane łącza, zweryfikowałem, że mam ProjectInstaller, łącznie z usługą komponentu [Proces] Installer1, poprawnie skonfigurowany. Uruchamiaj installutil.exe jako administrator. Nadal zgłasza "Brak publicznych instalatorów z atrybutem RunInstallerAttribute.Yes można znaleźć". Jakieś pomysły? –

+4

Lol. Uwielbiam, że link "Zupełnie stare" to strona o nazwie Kodeks tajemny. Im starsza strona, tym prawdziwsza staje się nazwa :-) – HotN

10

Patrząc na:

Brak instalatorzy publiczne z RunInstallerAttribute.Yes atrybut można znaleźć w katalogu C: \ Users \ mojanazwa \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestSe rvice \ obj \ x86 \ Debug \ TestService.exe.

Wygląda na to, że w kodzie może nie być klasy instalatora. Jest to klasa dziedzicząca po Installer, która powie installutil jak zainstalować twój plik wykonywalny jako usługę.

P.s. Mam tutaj swój własny, mały samodinstalujący/debuggable szablon usługi Windows, z którego można skopiować kod lub użyć: Debuggable, Self-Installing Windows Service

+0

Kiedy kliknij prawym przyciskiem myszy projekt TestService w Visual Studio -> Właściwości -> Usługi, strona jest wyłączona ... Czy odnosiłaś się do innej lokalizacji? W aplikacji nazwa zespołu to TestService. – jkh

+0

@John: Zignoruj ​​pierwszą część dotyczącą konsoli usług, spójrz na drugą część, zaczynając od * Właściwie *. Wygląda na to, że usługa nigdy nie została zainstalowana, ponieważ nie znalazła instalatora. –

2

dwa typowe problemy:

  1. Brakujące klasy ProjectInstaller (jak @MiguelAngelo wskazał)
  2. wierszu polecenia musi „Uruchom jako Administrator "
2

Innym możliwym problemem (co wpadłem):

Pamiętaj, że klasa ProjectInstaller jest public. Szczerze mówiąc, nie jestem pewien, jak dokładnie to zrobiłem, ale dodałem obsługi zdarzeń do ProjectInstaller.Designer.cs, jak:

this.serviceProcessInstaller1.BeforeInstall += new System.Configuration.Install.InstallEventHandler(this.serviceProcessInstaller1_BeforeInstall);

Chyba podczas automatycznym procesie tworzenia funkcji obsługi w ProjectInstaller.cs zmienił klasę definicja z

public class ProjectInstaller : System.Configuration.Install.Installer

do

partial class ProjectInstaller : System.Configuration.Install.Installer

Zastąpienie słowa kluczowego za pomocą partial. Tak więc, aby to naprawić to musi być

public partial class ProjectInstaller : System.Configuration.Install.Installer

używam programu Visual Studio 2013 wydanie wspólnotowego.

6

Oto alternatywny sposób instalacji i pozbycia się tego komunikatu o błędzie. Wydaje się również, że Express VS2015 nie ma pozycji menu "Add Installer".

Po prostu trzeba utworzyć klasę i dodać poniższy kod i dodać referencję 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); 
     } 
    } 
} 
+0

Uruchamianie VS2015 również i to rozwiązanie spowodowało, że przeszedłem obok komunikatu o błędzie "Brak publicznych instalacji z komunikatem o błędzie RunInstallerAttribute.Yes", który wcześniej otrzymałem. Dziękuję Ci! – PHBeagle

1

Stealth Zmiana w VS 2010 i .NET 4.0 lub nowszy

Brak instalatorzy publiczne z RunInstallerAttribute.Yes atrybut można znaleźć

Jest zmiana alias lub oczyszczania kompilator w .NET, które mogą ujawnić to drobne zmiany w twoim konkretnym przypadku.

Jeśli masz następujący kod ...

RunInstaller(true) // old alias 

może trzeba zaktualizować go do

RunInstallerAttribute(true) // new property spelling 

Jest jak aliasem zmieniło pod kołdrą w czasie kompilacji lub w czasie wykonywania i będziesz uzyskać to zachowanie błędu. Powyższa jawna zmiana w RunInstallerAttribute (true) naprawiła ją we wszystkich naszych scenariuszach instalacji na wszystkich komputerach.

Po dodaniu projektu lub usługi Instalator następnie sprawdzić na „starej” RunInstaller (prawda) i zmienić go na nowy RunInstallerAttribute (prawdziwego)

+0

Zgodnie z moją wiedzą można pominąć przyrostek "Atrybut", tj. [RunInstaller (true)] i [RunInstallerAttribute (true)] są takie same. Wypróbuj za pomocą innego atrybutu, np. [DebuggerStepThrough()] i [DebuggerStepThroughAttribute()] - oba będą działać po zastosowaniu do klasy. – Matt

Powiązane problemy