2017-03-17 10 views
0

Wenn ich meinen Code debuggen erscheint es ein Dialogfeld, dass Windows-Dienst Fehler starten - kann den Dienst von der Befehlszeile und Debugger nicht starten. Ein Windows-Dienst muss zuerst installiert werden (mit installutil.exe) und dann mit Server-Explorer, Windows-Dienst-Verwaltungstool oder net Start-Befehl gestartet werden.Windows-Dienst Startfehler

Aber ich habe meinen Service installiert. Unten ist das Skript von cmd mit Administratorrechten.

C:\Users\Sapuser\Documents\Visual Studio 2013\Projects\WindowsService1\WindowsSe 
rvice1\bin\Debug>installutil WindowsService1.exe 
Microsoft (R) .NET Framework Installation utility Version 4.0.30319.33440 
Copyright (C) Microsoft Corporation. All rights reserved. 


Running a transacted installation. 

Beginning the Install phase of the installation. 
See the contents of the log file for the C:\Users\Sapuser\Documents\Visual Studi 
o 2013\Projects\WindowsService1\WindowsService1\bin\Debug\WindowsService1.exe as 
sembly's progress. 
The file is located at C:\Users\Sapuser\Documents\Visual Studio 2013\Projects\Wi 
ndowsService1\WindowsService1\bin\Debug\WindowsService1.InstallLog. 
Installing assembly 'C:\Users\Sapuser\Documents\Visual Studio 2013\Projects\Wind 
owsService1\WindowsService1\bin\Debug\WindowsService1.exe'. 
Affected parameters are: 
    logtoconsole = 
    logfile = C:\Users\Sapuser\Documents\Visual Studio 2013\Projects\WindowsServi 
ce1\WindowsService1\bin\Debug\WindowsService1.InstallLog 
    assemblypath = C:\Users\Sapuser\Documents\Visual Studio 2013\Projects\Windows 
Service1\WindowsService1\bin\Debug\WindowsService1.exe 
Installing service MyTestWinService... 
Service MyTestWinService has been successfully installed. 
Creating EventLog source MyTestWinService in log Application... 

The Install phase completed successfully, and the Commit phase is beginning. 
See the contents of the log file for the C:\Users\Sapuser\Documents\Visual Studi 
o 2013\Projects\WindowsService1\WindowsService1\bin\Debug\WindowsService1.exe as 
sembly's progress. 
The file is located at C:\Users\Sapuser\Documents\Visual Studio 2013\Projects\Wi 
ndowsService1\WindowsService1\bin\Debug\WindowsService1.InstallLog. 
Committing assembly 'C:\Users\Sapuser\Documents\Visual Studio 2013\Projects\Wind 
owsService1\WindowsService1\bin\Debug\WindowsService1.exe'. 
Affected parameters are: 
    logtoconsole = 
    logfile = C:\Users\Sapuser\Documents\Visual Studio 2013\Projects\WindowsServi 
ce1\WindowsService1\bin\Debug\WindowsService1.InstallLog 
    assemblypath = C:\Users\Sapuser\Documents\Visual Studio 2013\Projects\Windows 
Service1\WindowsService1\bin\Debug\WindowsService1.exe 

The Commit phase completed successfully. 

The transacted install has completed. 

C:\Users\Sapuser\Documents\Visual Studio 2013\Projects\WindowsService1\WindowsSe 
rvice1\bin\Debug>net start MyTestWinService 
The MyTestWinService service is starting. 
The MyTestWinService service was started successfully. 

Ich bin mein Code für ref Befestigung:

public partial class Service1 : ServiceBase 
    { 
     private Timer timer1 = null; 

     public Service1() 
     { 
      InitializeComponent(); 
     } 

     protected override void OnStart(string[] args) 
     { 
      timer1 = new Timer(); 
      this.timer1.Interval = 60000; //60 sec 
      this.timer1.Elapsed +=new System.Timers.ElapsedEventHandler(this.timer1_Tick); 
      timer1.Enabled=true; 
      Library.WriteErrorLog("test windows service started"); 

     } 

     protected override void OnStop() 
     { 
      timer1.Enabled = false; 
      Library.WriteErrorLog("Test Service ended"); 
     } 

     public void timer1_Tick(object sender, ElapsedEventArgs e) 
     { 
      //job 
      var result = RunProcess(@"c:\", "webupknvp.Bat", "", false); 
      if (result == 0) 
      { 
       // success 
       Console.WriteLine("Sucess"); 
      } 
      else 
      { 
       // failed ErrorLevel/app ExitCode 
       Console.WriteLine("failed try again"); 

      } 


     } 

     public int RunProcess(string workDir, string appName, string args, bool hide = false) 
      { 

        Process proc = null; 
        proc = new Process();   
        string batrun = string.Format("cmd.exe", "/c" + @"C:\Abhay\batfile"); // or @"C:\Abhay\batfile" in the end ("cmd.exe", "/c" + @"C:\Abhay\batfile") 
        proc.StartInfo.UseShellExecute = false; //addition  
        proc.StartInfo.WorkingDirectory = workDir;//batrun 
        proc.StartInfo.FileName = appName; 
        proc.StartInfo.Arguments = args; 
        proc.StartInfo.CreateNoWindow = hide; 

        proc.Start(); 
        proc.WaitForExit(); 

        return proc.ExitCode; 
       } 
    } 
} 

der Bibliotheksklasse

public static void WriteErrorLog(Exception ex) 
     { 
      StreamWriter sw = null; 
      try 
      { 
       sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\ Logfile.txt", true); 
       sw.WriteLine(DateTime.Now.ToString() + ":" + ex.Source.ToString().Trim() + ";" + ex.Message.ToString().Trim()); 
       sw.Flush(); 
       sw.Close(); 

      } 
      catch 
      { 

      } 
     } 

     public static void WriteErrorLog(string Message) 
     { 
      StreamWriter sw = null; 
      try 
      { 

       sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\ Logfile.txt", true); 
       sw.WriteLine(DateTime.Now.ToString() + ":" + Message); 
       sw.Flush(); 
       sw.Close(); 
      } 
      catch 
      { 

      } 
     } 
    } 
} 

Program.cs

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

     } 

was soll ich ändern?

+0

Mit "debug my code" meinen Sie von Visual Studios? Sie können keinen Dienst von Visual Studios ausführen, um es zu debuggen. Nach dem, was Sie gepostet haben, haben Sie den Dienst installiert und er läuft (Sie sollten ihn im Fenster Dienste sehen). Aber das ist die installierte Version; VS wird weiterhin nicht in der Lage sein, den Dienst über die IDE auszuführen. – Lithium

+0

@Lithium ja ich kann den Service im Service Window sehen und es wird auch von net Start von Admin cmd gestartet. auf der anderen Seite beginnt auch der Dienst mit dem Netzstart, aber der Job, d. h. das Ausführen einer Stapeldatei, wird von diesem Dienst nicht ausgeführt. –

Antwort

2

Ihre Hauptfunktion erlaubt kein Debugging. Sie können eine debug Version zusätzlich zu einer Release-Version erstellen (beachten Sie, dass Sie nur die Debug-Version debuggen können, und Sie werden die Debug-Version als Dienst installieren nicht in der Lage sein!) Wie folgt:

private static void Main(string[] _arguments) 
    { 
     // ... some general code here 
     StartDebug(_arguments); 
     StartRelease(); 
    } 

    [Conditional("DEBUG")] 
    private static void StartDebug(string[] _arguments) 
    { 
     MessageBox.Show("Starting in debug mode"); 

     try 
     { 
      Service1 service = new Service1(); 
      service.Start(_arguments); 
      while (true) 
      { 
       Thread.Sleep(100); 
      } 
     } 
     catch (Exception ex) 
     { 
      Logger.LogException(ex); 
     }    
    } 

    [Conditional("RELEASE")] 
    private static void StartRelease() 
    { 
     ServiceBase[] servicesToRun = { new Service1() }; 
     ServiceBase.Run(servicesToRun); 
    } 

Beachten Sie, dass Ihr Service1 eine internal Start Methode haben sollte.

Edit:

Derzeit Sie OnStart überschreiben. Ändern Sie das wie folgt:

protected override void OnStart(string[] args) 
    { 
     Start(args); 
    } 

    internal void Start(string[] args) 
    { 
     timer1 = new Timer(); 
     this.timer1.Interval = 60000; //60 sec 
     this.timer1.Elapsed +=new System.Timers.ElapsedEventHandler(this.timer1_Tick); 
     timer1.Enabled=true; 
     Library.WriteErrorLog("test windows service started"); 
    } 
+0

Mein Dienst hat keine interne Startmethode. und das ist das erste Mal, dass ich einen Service erstelle, so dass ich mir nicht bewusst bin, was die interne Startmethode ist. –

+0

@AbhaySinghania bearbeitet die Antwort, siehe Beispiel dort –

+0

Danke @BernhardHiller –

Verwandte Themen