感到沮丧一直在寻找这一天...我正在创建一个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);
}
}
有些东西给了我一个空引用异常,我不知道它在哪里。
感谢您的帮助。
答案 0 :(得分:5)
您可以在服务启动时在代码中添加强制断点...
protected override void OnStart(string[] args)
{
System.Diagnostics.Debugger.Break();
eventLog1.WriteEntry("In OnStart");
...
}
..并将调试器附加到进程
答案 1 :(得分:1)
eventLog1.WriteEntry("Null reference in OnStart(): " + ...);
我认为你是自己信息的受害者。 OnStart中实际上没有发生异常,即使您的消息说它确实发生了。它在RequestServer类中被轰炸,你没有发布的代码。请注意调用堆栈如何为您提供正确的信息。列出的.ctor()是类的构造函数,就是那个被轰炸的构造函数。
看看它。并修复WriteEntry()参数,我建议像“启动失败”。
答案 2 :(得分:0)
更好的是,启动一个调试器:
protected override void OnStart( string [] args )
{
if ( args.Contains( "debug" ) ) System.Diagnostics.Debugger.Launch();
}
在services.msc中,您可以通过右键单击(已停止)服务“属性/常规/启动参数”来添加要在启动时传递的参数