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 Umsetzung System.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 der serviceInstall-element könnte ich auch einen Befehl ausführen, danach (aka running installUtil 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)
InformationsquelleAutor user808128 | 2012-09-11
Schreibe einen Kommentar