2016-03-19 9 views
2

ich einen Windows-Dienst schrieb, können Sie Code unterWindows-Dienst beendet wird unmittelbar nach statring

static void Main() 
    { 
     ServiceBase[] ServicesToRun; 
     ServicesToRun = new ServiceBase[] 
     { 
      new AutoUpgradeServiceDemo() 
     }; 
     ServiceBase.Run(ServicesToRun); 

    } 

//Service class 
    public AutoUpgradeServiceDemo() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnStart(string[] args) 
    { 
     MessageBox.Show("Service Has been Started"); 
     //My logic goes here 
    } 

    protected override void OnStop() 
    { 
     //My logic goes here 
     MessageBox.Show("Service Has been Stopped"); 
    } 

nach der Installation finden, begann ich es manuell durch. Es schließt sich sofort und zeigt folgenden Fehler.

enter image description here

Kann mir jemand helfen ...

+0

Ist es eine Ausnahme zu werfen ? Sie sollten einige Ausnahmen behandeln. Überprüfen Sie auch das Windows-Ereignisprotokoll. dort kann es einige nützliche Informationen geben. –

+0

Ja Roryap ich implementiert Ausnahme-Behandlung und der gesamte Code ist Ausnahme frei..aktuell arbeite ich auf Windows Server 2008 r2 ... wie Ereignisregistrierung zu überprüfen ..? –

Antwort

2

Windows-Dienste haben keine Benutzeroberfläche. Sie können also keine Nachrichtenbox von einem Dienst anzeigen. Wenn Sie Fehler melden möchten, wird standardmäßig das Ereignisprotokoll verwendet.

protected override void OnStart(string[] args) 
{ 
    base.OnStart(args); 
    //my stuff 
    this.WriteEventLogEntry("My service started successfully", System.Diagnostics.EventLogEntryType.Information); 
} 
0

Windows-Dienst muss OnStart() in begrenzten Zeit auszuführen oder getötet wird. Wie viele Sekunden? Ich erinnere mich nicht, schau in MSDN. Wenn der Dienst in diesem Szenario getötet wird, werden nicht zu viele Informationen gemeldet, vielleicht wird Ihr auch vom Watchdog getötet?

Wenn mehr Start-up ist erforderlich, ich in der Regel neuen Thread starten

protected override void OnStart(string[] args) 
     { 

      MyXxxxxStarter.LogInfo("Try to start thread"); 

      worker = new Thread(WorkerThread); 
      worker.Start(); 

      MyXxxxxStarter.LogInfo("Thread started "); 

     } 

ich mit TSungur zustimmen, Anmeldung nur durch Ereignisprotokoll (in meinem Code an einem Ort implementiert)

Verwandte Themen