调试窗口服务

本文关键字:服务 窗口 调试 | 更新日期: 2023-09-27 18:04:50

我想调试窗口服务。我应该在main()中写什么来启用窗口服务中的调试。我正在用c#开发窗口服务。

#if(DEBUG)
      System.Diagnostics.Debugger.Break();
      this.OnStart(null);
      System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
 #else
      ServiceBase.Run(this);
 #endif

我写了上面的代码段,但在网上(这个

调试窗口服务

)

我个人使用这个方法调试一个Windows服务:

static void Main() {
    if (!Environment.UserInteractive) {
        // We are not in debug mode, startup as service
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[] { new MyServer() };
        ServiceBase.Run(ServicesToRun);
    } else {
        // We are in debug mode, startup as application
        MyServer service = new MyServer();
        service.StartService();
        System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
    }
}

并在MyServer类中创建一个新方法,该方法将使用OnStart事件:

public void StartService() {
    this.OnStart(new string[0]);
}

试试这个:

#if DEBUG
while (!System.Diagnostics.Debugger.IsAttached)
{
    Thread.Sleep(1000);
}
System.Diagnostics.Debugger.Break();
#endif

它等待,直到您附加调试器,然后中断。

我会这样做:
在服务的OnStart方法中,在顶部添加对Debugger.Break()的调用:

protected override void OnStart(string[] args)
{
    #if DEBUG
        Debugger.Break();
    #endif
    // ... the actual code
}

如果您需要在不安装的情况下进行调试,请在Program.cs class中添加以下行并在函数中设置断点,然后单击F5

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