2011-03-10 121 views
0

沮喪的一直在看着這一整天......我正在創建一個Windows服務......此代碼在常規控制檯應用程序上正常工作,並且不能在Windows服務上工作。我得到一個空引用異常:空引用異常

Null reference in OnStart(): Object reference not set to an instance of an object. 
at VNurseService.Server.RequestServer..ctor(Server s) 
at VNurseService.VNurseServer.OnStart(String[] args) 

代碼如下所示:

protected override void OnStart(string[] args) 
    { 

     eventLog1.WriteEntry("In OnStart"); 
     Start: 
     try 
     { 
      server = new Server(); 

      Server.RequestServer reference = new Server.RequestServer(server); 
      new Thread(reference.run).Start(); 
      //r1 = new Thread(reference.run); r1.Start(); 

      Server.ResponseServer reference2 = new Server.ResponseServer(server); 
      new Thread(reference2.run).Start(); 
      //r2 = new Thread(reference.run); r2.Start(); 

      Server.reference3 = new Server.ConfirmationServer(server); 

      server.guiServer = new Guicom(); 
      server.restartServer = new Restart(); 

      eventLog1.WriteEntry("Restart in server is " + server.RESTART.ToString()); 

      new Thread(server.guiServer.accept).Start(); 
      new Thread(server.restartServer.accept).Start(); 
      goto check; 

     check: 
      while (true) 
      { 
       eventLog1.WriteEntry("CheckRestart is " + server.checkRestart().ToString()); 
       if (server.checkRestart()) 
       { 
        reference.cleanup(); 
        //r1.Abort(); 
        reference2.cleanup(); 
        //r2.Abort(); 
        //server = null; 
        goto Start; 
       } 
      } 
     } 
     catch (NullReferenceException ex) 
     { 
      eventLog1.WriteEntry("Null reference in OnStart(): " + ex.Message+ " " + ex.InnerException + @"\n " + ex.StackTrace); 
     } 
    } 

而且東西是給我一個空引用異常,我不知道它在哪裏。

感謝您的幫助提前。

+2

什麼行,發佈完整例外 – asawyer 2011-03-10 23:04:33

+0

如果您沒有收到行號,請確保將.pdb文件放在service exe旁邊。 – Blorgbeard 2011-03-10 23:06:18

+1

我真的只看到一個goto? – Nix 2011-03-10 23:06:23

回答

5

您可以在服務啓動中的代碼添加強制斷點...

protected override void OnStart(string[] args)  
{ 
    System.Diagnostics.Debugger.Break();  

    eventLog1.WriteEntry("In OnStart"); 
    ... 
} 

..和調試器附着在該過程

+1

其他閱讀建議[如何調試Windows服務應用程序](http://msdn.microsoft.com/zh-cn/library/7a50syb3.aspx)和[什麼是.NET中的NullReferenceException?](http:// stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net) – 2011-03-10 23:14:41

1
eventLog1.WriteEntry("Null reference in OnStart(): " + ...); 

我覺得你是你自己的受害者信息。 OnStart中實際上並沒有發生異常,即使您的消息說明了這一點。它在RequestServer類中轟炸,你沒有發佈的代碼。請注意調用堆棧如何爲您提供正確的信息。那裏列出的.ctor()是這個類的構造函數,那是被炸的。

看看它。並修復WriteEntry()參數,我會推薦類似「啓動失敗」。

+0

不是一個*類*構造函數被稱爲'cctor'? – AakashM 2011-03-14 12:59:51

+0

@Aak - 是的,臨時腦凍結。謝謝 :) – 2011-03-14 13:05:58

0

更妙的是,啓動調試程序:

protected override void OnStart(string [] args) 
{ 
    if (args.Contains("debug")) System.Diagnostics.Debugger.Launch(); 
} 

在SERVICES.MSC,您可以添加參數,在啓動時用鼠標右鍵點擊所傳遞的(停止)服務「屬性/常規/啓動參數」