Kann nicht starten Sie den Windows-Dienst mit WiX
Habe ich Folgendes WiX-Projekt zu installieren mein service:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="GUID" Name="SetupWinService" Language="1049"
Version="1.0.0.0" Manufacturer="SetupWinService"
UpgradeCode="GUID">
<Package InstallerVersion="200" Compressed="yes"
Languages="1049" SummaryCodepage="1251"
InstallPrivileges="elevated"/>
<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="WinService" Name="My Windows Service">
</Directory>
</Directory>
</Directory>
<DirectoryRef Id="WinService">
<Component Id="WinServiceInstallation" Guid="GUID">
<File Id="ClientService.exe"
Name="ClientService.exe"
Source="...\ClientService.exe"
Vital="yes" KeyPath="yes" DiskId="1"/>
<File Id="App.config"
Name="App.config"
Source="...\App.config"
Vital="yes" KeyPath="no" DiskId="1"/>
<!--And some DLLs here-->
<ServiceInstall Id="ServiceInstaller"
Type="ownProcess"
Vital="yes"
Name="WcfServiceHost"
DisplayName="WcfServiceHost"
Description="Hosts Wcf Service"
Start="auto"
Account="LocalSystem"
ErrorControl="ignore"
Interactive="no">
</ServiceInstall>
<ServiceControl Id="StartService" Name="WcfServiceHost"
Start="install" Stop="uninstall" Remove="uninstall"
Wait="yes" />
</Component>
</DirectoryRef>
<Feature Id="Complete" Title="SetupWinService" Level="1">
<ComponentRef Id="WinServiceInstallation" />
<ComponentGroupRef Id="Product.Generated" />
</Feature>
</Product>
</Wix>
Habe ich installieren können meinen service, ich kann Sie aber nicht starten nach der Installation. Es sagt:
Dienst nicht gestartet werden konnte. Stellen Sie sicher, dass Sie ausreichende Berechtigungen zum starten von Systemdiensten.
Aber ich mein installer als administrator (Windows 7 Professional) und auch deaktivieren UAC. Desweiteren kann ich installieren und starten Sie das service mit instalutil.exe durch Eingabeaufforderung (meine service-Projekt umfasst die Realisierung der Installer-Klasse und im Allgemeinen gekennzeichnet ist, die nach dieser Artikel), und alles Prima funktioniert mit dem service in diesem Fall.
Wenn ich ersetzen Wait="ja" von der ServiceControl-element auf "Nein, der Dienst wird installiert, ohne Fehler, aber es startet nicht. Ich kann auch nicht den Dienst manuell starten, in diesem Fall, denn der Dienst startet und Stoppt sofort mit der Meldung "Dienst wurde auf" Lokaler Computer " gestartet und dann angehalten. Einige Dienste werden automatisch angehalten, wenn Sie keine Arbeit zu tun".
Suchte ich über dieses problem im Internet, aber ich fand keine Lösungen.
Wie kann ich es beheben?
Das ist der code von meinem Installer-Klasse:
[RunInstaller(true)]
public class ProjectInstaller : Installer
{
private ServiceProcessInstaller serviceProcessInstaller;
private ServiceInstaller serviceInstaller;
public ProjectInstaller()
{
this.serviceProcessInstaller = new ServiceProcessInstaller();
this.serviceProcessInstaller.Account = ServiceAccount.LocalSystem;
this.serviceProcessInstaller.Username = null;
this.serviceProcessInstaller.Password = null;
this.serviceInstaller = new ServiceInstaller();
this.serviceInstaller.ServiceName = "ClientServicesHost";
this.serviceInstaller.StartType = ServiceStartMode.Automatic;
this.Installers.Add(serviceProcessInstaller);
this.Installers.Add(serviceInstaller);
this.AfterInstall +=
new InstallEventHandler(ProjectInstaller_AfterInstall);
}
void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e)
{
ServiceController sc = new ServiceController("ClientServicesHost");
sc.Start();
}
}
Und meine Windows-Dienst:
class WindowsClientService : ServiceBase
{
public ServiceHost serviceHost = null;
public WindowsClientService()
{
this.ServiceName = "WcfServiceHost";
}
public static void Main()
{
ServiceBase.Run(new WindowsClientService());
}
protected override void OnStart(string[] args)
{
if (serviceHost != null)
{
serviceHost.Close();
}
//Create a ServiceHost for WcfClientService type
//and provide the base address.
serviceHost = new ServiceHost(typeof(WcfClientService));
//Open the ServiceHost to create listeners
//and start listening for messages.
serviceHost.Open();
}
protected override void OnStop()
{
if (serviceHost != null)
{
serviceHost.Close();
serviceHost = null;
}
}
}
Ich wurde darauf hingewiesen, dass der Grund meines Dienstes wird automatisch beendet - es tut sich nix nach dem start. Kann es sein? Mein service erstellt Zuhörer und beginnt mit der überwachung - ist, dass "nichts tut"?
- so, läuft Ihre wix-installer erstellt einen Eintrag in der "services.msc"? können Sie starten es von dort? wenn nicht, und das wäre meine Vermutung, Sie könnten ein problem haben mit den ausführenden Benutzer des Dienstes. können Sie uns die
installUtil
-Befehl, den du benutzt hast zum erstellen einer Laufenden service-Eintrag? oder noch besser: fügen Sie bitte Ihre konkrete UmsetzungSystem.Configuration.Install.Installer
! - denken Sie daran: Sie brauchen nur die installer-Klasse, wenn Sie mit
installUtil
. sonst ist es völlig nutzlos. ich hatte eine ähnliche Frage vor einiger Zeit (stackoverflow.com/questions/9884959/...) und einige Kerl erzählte mir, dass anstelle der Verwendung derserviceInstall
-element könnte ich auch einen Befehl ausführen, danach (aka runninginstallUtil
nach der installation), um meinen Dienst korrekt installiert. - Hi Andreas. Nach der Installation des service mit WiX es scheint, in den Dienstleistungen.msc. Ich kann nicht starten, denn es startet und Stoppt sofort (ich schrieb über es in meiner Frage). Mit installutil.exe und mit meiner Umsetzung der Installer-Klasse alle installiert und startet auch. Ich meine die Umsetzung der Installer-Klasse auf die Frage zusätzlich. Ich weiß auch, dass ich den Dienst installieren mit WiX und mit dem Aufruf der installutil.exe in der CustomAction...
- ...Aber es führt zu einem anderen problem mit installutil.exe Lage und Unterschiede zwischen .NET framework-Versionen. So will ich mit built-in Funktion (ServiceInstall-ServiceControl) fo ersten. Darüber hinaus habe ich meine Frage gestellt auch dort, wenn Sie interessant.
- btw ... anstatt das zu tun
...\ClientService.exe
Sie könnte sich auch auf das Projekt und dann einfach mit zB$(var.**ProjectName**.TargetPath)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche Problem mit WiX 3.7.821.0 und meinen service. Es installiert für eine Weile und die gleichen lästigen "Dienst konnte nicht gestartet werden. Stellen Sie sicher, dass Sie ausreichende Berechtigungen zum starten von Systemdiensten" erschienen.
Habe viel versucht, aber die Letzte Sache war die Verwendung von zwei Abschnitten für
<ServiceControl>
anstatt zu versuchen, zu pauken Sie alle in ein einziges. Eine für Start und eine für Stop. Nun startet der Dienst in Ordnung.Funktioniert nicht:
Dies funktioniert:
Ich hatte den gleichen Fehler, und in meinem Fall hatte ich vermisst
KeyPath='yes' Vital="yes"
auf meinem file-element.Hier ist meine Komponente definition:
Bin ich auf der Suche nach der Antwort für eine Weile, und schließlich habe ich es behoben!
Halten die gleichen Namen ServiceControl als die ServiceInstall Namen.
Ergebnis:
Den Benutzernamen für
ServiceInstall
sollten umfassend qualifiziert:NT AUTHORITY\NetworkService
NT AUTHORITY\LocalService
NT AUTHORITY\SYSTEM
Gut, kehrte ich in das Projekt nach über 1 und halb Jahre. Und versucht, es neu kompilieren und starten Sie diesen Dienst wieder. Und es funktioniert!
All das geändert ist, ich Hinzugefügt clientaccesspolicy.xml zu meinem service, und führen Sie policyServiceHost (Typ WebServiceHost) zusammen mit meinem Dienst. Aber ich glaube nicht, dass es wichtig ist, weil es betrifft die Innenseiten meiner Anwendung - nicht, um Dienst zu starten.
So, ich habe viele Variationen, wie:
1) dieses.serviceProcessInstaller.Username = null;
oder
diese.serviceProcessInstaller.Username = @"NT AUTHORITY\SYSTEM";
2) Zwei-oder single ServiceControl Abschnitte.
3) Stop="beide"
oder
Stop="deinstallieren"
ALLES FUNKTIONIERT JETZT!!!
Ich weiß nicht, was passiert ist. Ich lass es zu irgendeiner Art von Fehler oder etwas seltsame Konfiguration von meinem system, oder was anderes, das nicht gestatten Sie mir zu Beginn meines Dienstes automatisch vor. Aber jetzt sind alle worksfine.
Anderen Worten, ich finde nicht heraus, was der Grund war, der meinen Dienst nicht automatisch gestartet. Es wurde über "ausreichende Berechtigungen" (siehe ersten post), aber es ist nicht klar genug für mich, auch jetzt noch.
Nur eine Bemerkung. Wenn ich zwei ServiceControl Abschnitte bei der deinstallation des service, wird eine Warnung Fenster angezeigt (Windows 7) und bieten Sie zum schließen der Anwendung (service) automatisch und so weiter. Also habe ich Sie einfach akzeptieren und Dienst deinstalliert auch. Aber keine Warnung vor windows angezeigt, wenn ich nur eine ServiceControl Abschnitt, wie in meinem Beispiel im ersten post. Und wieder ist es keine Beziehungen zu 1) und 3) Punkte-Kombination.
Verwende ich dieses snippet für die .wxs-Datei
Mit diesem basic
System.ServiceProcess.ServiceBase
-Umsetzung (die nicht wirklich von Ihnen unterscheiden)Mit diesem snippet habe ich ein demo-Projekt zu arbeiten ...
Voll funktionsfähige demo-Projekt zur Verfügung - wenn dies immer noch fehlschlägt, bitte passen Sie den code, so dass ich reproduzieren kann Ihr Problem!
serviceHost.Open();
im Fenster service-code. Ich weiß nicht, aus welchem Grund gerade jetzt - ich werde versuchen, das zu erkunden es später. Aber ohne diese Zeichenfolge der code alle installiert und startet auch.try
undcatch
- Anweisung, so dass Sie log ist die Ausnahme!Hatte ich diese Fehlermeldung auf einigen Computern. Die gleiche ausführbare arbeiten auf einigen und gibt diese Fehler auf andere.
Aktualisieren .NET 1.1/2.0/3.0 auf diesen Computern hilft (hat es bei mir geklappt unter Windows XP, 7 und 8.1).