空引用exception

沮丧的一直在看这一整天…我正在创build一个Windows服务…这个代码工作正常的控制台应用程序,并不适用于Windows服务。 我得到一个空引用exception:

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); } } 

有些东西给我一个空引用exception,我不知道它在哪里。

我在这里先向您的帮助表示感谢。

您可以在服务启动时在代码中添加强制断点…

 protected override void OnStart(string[] args) { System.Diagnostics.Debugger.Break(); eventLog1.WriteEntry("In OnStart"); ... } 

..并附加一个调试器的过程

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

我认为你是你自己信息的受害者。 OnStart中实际上并没有发生异常,即使你的消息说明了这一点。 它在Requestserver类中轰炸,你没有发布的代码。 请注意,调用堆栈如何为您提供正确的信息。 那里列出的.ctor()是这个类的构造函数,那是被炸的。

看看它。 并修复WriteEntry()参数,我会推荐像“启动失败”。

更好的是,启动一个调试器:

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

在services.msc中,您可以通过右键单击(停止)服务“Properties / General / Start Parameters”来添加要在启动时传递的参数