Wenn ich in Visual Studio 2010 einen neuen Windows-Dienst erstelle, wird die Meldung angezeigt, dass InstallUtil und net start zum Ausführen des Dienstes verwendet werden sollen.
Ich habe die folgenden Schritte versucht:
- Neues Projekt erstellen Datei -> Neu -> Projekt -> Windows-Dienst
- Projektname: TestService
- Projekt so wie es ist erstellen (Service1-Konstruktor, OnStart, OnStop)
- Öffnen Sie die Eingabeaufforderung und führen Sie "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ InstallUtil.exe" TestService.exe aus
- Führen Sie net start TestService aus .
Ausgabe von Schritt 4
Ausführen einer getätigten Installation.
Beginn der Installationsphase der Installation.
Informationen zum Fortschritt der Assembly C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestService \ obj \ x86 \ Debug \ TestService.exe finden Sie im Inhalt der Protokolldatei.
Die Datei befindet sich unter C: \ Benutzer \ Mein Benutzername \ Dokumente \ Visual Studio 2010 \ Projekte \ Tes tService \ TestService \ obj \ x86 \ Debug \ TestService.InstallLog.
Installieren der Assembly 'C: \ Benutzer \ Benutzername \ Dokumente \ Visual Studio 2010 \ Projekte \ TestS ervice \ TestService \ obj \ x86 \ Debug \ TestService.exe'.
Betroffene Parameter sind:
logtoconsole =
logfile = C: \ Benutzer \ mein Benutzername \ Dokumente \ Visual Studio 2010 \ Projekte \ TestService \ TestService \ obj \ x86 \ Debug \ TestService.InstallLog
Assemblypfad = C: \ Benutzer \ Benutzername \ Dokumente \ Visual Studio 2010 \ Projekte \ TestServ ice \ TestService \ obj \ x86 \ Debug \ TestService.exe
In der Assembly C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestSe rvice \ obj \ x86 \ Debug \ TestService.exe wurden keine öffentlichen Installationsprogramme mit dem Attribut RunInstallerAttribute.Yes gefunden.
Die Installationsphase wurde erfolgreich abgeschlossen und die Festschreibungsphase beginnt.
Informationen zum Fortschritt der Assembly C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestService \ obj \ x86 \ Debug \ TestService.exe finden Sie im Inhalt der Protokolldatei.
Die Datei befindet sich unter C: \ Benutzer \ Mein Benutzername \ Dokumente \ Visual Studio 2010 \ Projekte \ Tes tService \ TestService \ obj \ x86 \ Debug \ TestService.InstallLog.
Festschreiben der Assembly 'C: \ Benutzer \ mein Benutzername \ Dokumente \ Visual Studio 2010 \ Projekte \ TestS ervice \ TestService \ obj \ x86 \ Debug \ TestService.exe'.
Betroffene Parameter sind:
logtoconsole =
logfile = C: \ Benutzer \ mein Benutzername \ Dokumente \ Visual Studio 2010 \ Projekte \ TestService \ TestService \ obj \ x86 \ Debug \ TestService.InstallLog
Assemblypfad = C: \ Benutzer \ Benutzername \ Dokumente \ Visual Studio 2010 \ Projekte \ TestServ ice \ TestService \ obj \ x86 \ Debug \ TestService.exe
In der Assembly C: \ Users \ myusername \ Documents \ Visual Studio 2010 \ Projects \ TestService \ TestSe rvice \ obj \ x86 \ Debug \ TestService.exe wurden keine öffentlichen Installationsprogramme mit dem Attribut RunInstallerAttribute.Yes gefunden.
Entfernen Sie die InstallState-Datei, da keine Installationsprogramme vorhanden sind.
Die Commit-Phase wurde erfolgreich abgeschlossen.
Die getätigte Installation ist abgeschlossen.
Ausgabe von Schritt 5
Der Dienstname ist ungültig.
Weitere Hilfe erhalten Sie durch Eingabe von NET HELPMSG 2185.
Anschauen:
Es sieht so aus, als hätten Sie möglicherweise keine Installationsklasse in Ihrem Code. Dies ist eine Klasse, die davon erbt
Installer
,installutil
wie Ihre ausführbare Datei als Dienst installiert wird.Ps Ich habe hier meine eigene kleine selbstinstallierende / debuggbare Windows-Dienstvorlage, aus der Sie Code kopieren oder verwenden können: Debuggierbarer, selbstinstallierender Windows-Dienst
quelle
Hier ist eine alternative Möglichkeit, das Installationsprogramm zu erstellen und diese Fehlermeldung zu entfernen. Außerdem scheint VS2015 Express nicht über den Menüpunkt "Installationsprogramm hinzufügen" zu verfügen.
Sie müssen lediglich eine Klasse erstellen, den folgenden Code hinzufügen und die Referenz System.Configuration.Install.dll hinzufügen.
quelle
Zwei typische Probleme:
quelle
Ein weiteres mögliches Problem (auf das ich gestoßen bin):
Stellen Sie sicher, dass die
ProjectInstaller
Klasse istpublic
. Um ehrlich zu sein, bin ich mir nicht sicher, wie genau ich es gemacht habe, aber ich habe Event-Handler hinzugefügtProjectInstaller.Designer.cs
, wie zum Beispiel:this.serviceProcessInstaller1.BeforeInstall += new System.Configuration.Install.InstallEventHandler(this.serviceProcessInstaller1_BeforeInstall);
Ich denke, während des automatischen Prozesses des Erstellens der Handlerfunktion
ProjectInstaller.cs
darin wurde die Klassendefinition von geändertpublic class ProjectInstaller : System.Configuration.Install.Installer
zu
partial class ProjectInstaller : System.Configuration.Install.Installer
Ersetzen des
public
Schlüsselworts durchpartial
. Also, um es zu beheben, muss es seinpublic partial class ProjectInstaller : System.Configuration.Install.Installer
Ich verwende die Visual Studio 2013 Community Edition.
quelle
Stealth Change in VS 2010 und .NET 4.0 und höher
Es wurden keine öffentlichen Installationsprogramme mit dem Attribut RunInstallerAttribute.Yes gefunden
In .NET gibt es eine Aliasänderung oder eine Compilerbereinigung, die diese kleine Optimierung für Ihren speziellen Fall aufzeigt.
Wenn Sie den folgenden Code haben ...
Möglicherweise müssen Sie es auf aktualisieren
Es ist wie ein Alias, der zur Kompilierungszeit oder zur Laufzeit unter dem Deckmantel geändert wird, und Sie erhalten dieses Fehlerverhalten. Die obige explizite Änderung an RunInstallerAttribute (true) hat das Problem in allen unseren Installationsszenarien auf allen Computern behoben.
Nachdem Sie das Projekt- oder Service-Installationsprogramm hinzugefügt haben, suchen Sie nach dem „alten“ RunInstaller (true) und ändern Sie ihn in das neue RunInstallerAttribute (true).
quelle
Ein weiterer Haken, auf den ich gestoßen bin: Stellen Sie sicher, dass Ihre vom Installer abgeleitete Klasse (normalerweise
ProjectInstaller
) ganz oben in der Namespace-Hierarchie steht. Ich habe versucht, eine öffentliche Klasse in einer anderen öffentlichen Klasse zu verwenden. Dies führt jedoch zu demselben alten Fehler:Es wurden keine öffentlichen Installationsprogramme mit dem Attribut RunInstallerAttribute.Yes gefunden
quelle