2012-07-20 12 views
42

hallo Ich bekomme diese FehlerWindows-Dienst Startfehler: Dienst kann nicht von der Kommandozeile oder Debugger starten

Dienst kann nicht von der Kommandozeile oder Debugger starten. Ein winwows-Dienst muss zuerst installiert werden (mit installutil.exe) und dann mit dem ServerExplorer, dem Windows Services-Administrator-Tool oder dem Befehl NET START gestartet werden.

und ich verstehe nicht, warum diese Fehler auftreten. Und hier ist mein Code:

{ 
    string Hash = ""; 
    string connectionstring = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString; 
    SqlConnection myConnection = new SqlConnection(connectionstring); 
    SqlCommand myCommand = new SqlCommand("GetNullHash", myConnection); 
    myCommand.CommandType = CommandType.StoredProcedure; 
    myConnection.Open(); 
    SqlDataReader rdr = myCommand.ExecuteReader(); 

    while (rdr.Read()) 
    { 
     string filename = @"\\" + rdr.GetString(3); 
     filename = System.IO.Path.Combine(filename, rdr.GetString(2)); 
     filename = System.IO.Path.Combine(filename, rdr.GetString(1)); 
     Hash = rdr.GetString(0); 
     Hash = computeHash(filename); 

    } 
    myConnection.Close(); 
    return Hash; 
} 

Antwort

52

Uhr this video, hatte ich die gleiche Frage. Er zeigt Ihnen auch, wie Sie den Dienst debuggen können.

Hier sind seine Anweisungen mit der grundlegenden C# -Windows Service-Vorlage in Visual Studio 2010/2012.

Sie fügen diese in die Service1.cs Datei:

public void onDebug() 
{ 
    OnStart(null); 
} 

Sie Ihr Haupt() ändern Sie da auf diese Weise zu nennen, wenn Sie in der DEBUG Aktive Lösungskonfiguration sind.

static void Main() 
{ 
    #if DEBUG 
    //While debugging this section is used. 
    Service1 myService = new Service1(); 
    myService.onDebug(); 
    System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite); 

    #else 
    //In Release this section is used. This is the "normal" way. 
    ServiceBase[] ServicesToRun; 
    ServicesToRun = new ServiceBase[] 
    { 
     new Service1() 
    }; 
    ServiceBase.Run(ServicesToRun); 
    #endif 
} 

Denken Sie daran, dass dies eine großartige Möglichkeit ist, Ihren Dienst zu debuggen. Es ruft OnStop() nicht an, es sei denn, Sie nennen es explizit so, wie wir OnStart(null) in der onDebug()-Funktion aufgerufen haben.

+0

sehen. Jemand bot mir auch einen" duh "Tipp an, der sagte: Entwickle deine Klasse wie in einem normalen Debuggable-Anwendung dann importieren Sie es in Ihren Service, wenn Sie das Gefühl haben, dass die Klasse bereit ist. – Cesar

+0

Was ich mache, war, dass ich die Funktionen, die ich zum Debuggen brauche, in die OnStart-Methode nach Timer.Start() gesetzt habe; damit kann ich debuggen. –

0

Ihr Code hat nichts mit der Service-Installation zu tun, ist es nicht das Problem.

Um den Dienst zu testen, müssen Sie ihn wie angegeben installieren.

Weitere Informationen über Ihren Service installieren: Installing and Uninstalling Services

25

Ihren Dienst installieren manuell

zu installieren oder deinstallieren Windows-Dienst manuell (die erstellt wurde .NET Framework) verwenden Dienstprogramm InstallUtil.exe. Dieses Tool finden Sie im folgenden Pfad (verwenden Sie die entsprechende Framework-Versionsnummer).

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe

installieren

installutil yourproject.exe 

installutil /u yourproject.exe 

See deinstallieren: How to: Install and Uninstall Services(Msdn)

Service programmaticall installieren y

So installieren Sie Service programmatisch C# finden Sie in der folgenden Klasse ServiceInstaller(c-sharpcorner) verwenden.

+0

Das funktionierte perfekt, ich habe einen problematischen Server hatte und müssen den Dienst dringend laufen, habe ich diesen Schritt die konfigurieren Service auf meinem lokalen Computer, bitte stellen Sie sicher, dass Sie mit dem richtigen Benutzer mit den erforderlichen Berechtigungen konfigurieren. – kolexinfos

+4

Nach dem Ausführen von 'installutil' heißt es, dass es erfolgreich war, aber ich kann den Dienst noch nicht starten oder im Service Manager – Bassie

0

Ich werde vorschlagen, ein Setup-Projekt aus den Gründen zu erstellen, während die Bereitstellung dieses scheint die beste Bequemlichkeit, keine Kopfschmerzen beim manuellen Kopieren von Dateien. Folgen Sie der Windows service setup creation tutorial und Sie wissen, wie Sie es erstellen. Und diese Instanz ist für vb.net, aber für jeden Typ gleich. So deinstallieren öffnen CMD und geben NET STOP {YourserviceName} einmal gestoppt Art in {YourServiceName} -u

0

zu öffnen CMD und geben {YourServiceName} -i einmal seine installierte Art in NET START {YourserviceName} installieren Sie da

starten

deinstallieren und es sollte deinstalliert werden

-1

Goto App.config

Finden

<setting name="RunAsWindowsService" serializeAs="String"> 
    <value>True</value> 
    </setting> 

Set auf False

+0

Gibt es eine Online-Dokumentation für diese Einstellung? Wo würde ich es hinzufügen? Ich habe ApplicationSettings ausprobiert und es hat keine Wirkung. – bornfromanegg

Verwandte Themen