C# Windows服务调试

C# Windows服务调试,c#,debugging,windows-services,C#,Debugging,Windows Services,如何调试windows服务?我无法从Visual Studio使用午餐服务-首先我需要使用InstallUtil.exe安装该服务,然后我可以从Windows服务管理工具启动该服务 当前,在从Windows服务管理工具启动服务后,我正在从Visual Studio调试选项卡将解决方案附加到正在运行的进程 是否有更方便的方法来执行此操作,或者是否有方法将服务配置为自安装(当我从IDE运行项目时)?为了调试Windows服务,您需要将Windows服务进程附加到Visual Studio。请参见下面

如何调试windows服务?我无法从Visual Studio使用午餐服务-首先我需要使用InstallUtil.exe安装该服务,然后我可以从
Windows服务管理工具启动该服务

当前,在从
Windows服务管理工具
启动服务后,我正在从Visual Studio调试选项卡将解决方案附加到正在运行的进程


是否有更方便的方法来执行此操作,或者是否有方法将服务配置为自安装(当我从IDE运行项目时)?

为了调试Windows服务,您需要Windows服务进程附加到Visual Studio。请参见下面我的屏幕截图:


如果你有任何问题,请告诉我

您可以作为控制台应用程序启动服务,并从主功能调用您的功能(启动/停止/etc)


或者您可以使用单元测试。

可能有点欺骗,但我使用了pragma来强制调试

在program.cs的主窗口中,尝试添加以下内容:

#if DEBUG
            YourService service = new YourService();
            service.OnDebug();

            // This prevents timeouts while debugging  
            System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
#else
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[]
            {
                        new YourService()
            };
            ServiceBase.Run(ServicesToRun);
#endif
public void OnDebug()
{
     OnStart(null);
}
然后,在service.cs文件中添加以下内容:

#if DEBUG
            YourService service = new YourService();
            service.OnDebug();

            // This prevents timeouts while debugging  
            System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
#else
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[]
            {
                        new YourService()
            };
            ServiceBase.Run(ServicesToRun);
#endif
public void OnDebug()
{
     OnStart(null);
}

那只不过是欺骗了开始的召唤。当不处于调试模式时,它将按正常方式执行。

确定,我将尝试,因此如果我将在后期生成中添加InstallUtil.exe命令,我将能够在从Visual Studio运行服务时调试它:)我已将“net start MyAwesomeService”添加到构建后事件中,我已确保在运行之前停止该服务。仍然收到“Windows启动失败”的消息,它告诉我需要先安装该服务,我做到了……我尝试了另一种方法:首先启动该服务,然后启动我的项目,但我有另一个例外:进程无法访问文件“bin\Debug\MyAwesomeService.exe”,因为它正被另一个进程使用。可能是因为我的操作系统使用了这个exe文件?是的,这就是我在问题中描述的。我正在寻找一种不同的、更方便的方法(如果存在)来调试windows服务…:)例如,如果我将我的项目附加到一个正在运行的进程,我会丢失我真正想要捕获的服务init\start。如前所述,这有点欺骗,但这似乎正是问题所要求的,不是吗?在任何情况下,上述示例中的服务实际上是一个服务,它作为一个服务运行良好,“调试模式”只是为了调试目的而执行的运行服务作为控制台应用程序,是调试代码的有效方式,“生态系统”的差异是另一个问题的明确级别,即使有限制,这种方法仍然很方便。此外,测试和bug修复是不同的。如果这种方法能够提供方便,并且结果是高效的,那么为什么不呢?即使不包括100%但包括95%的问题。