C# 调试Windows服务 脚本
我有一个用C写的windows服务。 我已经阅读了所有关于如何调试它的谷歌线程,但我仍然无法让它工作。 我已经运行了“PathTo.NetFramework\InstallUtil.exe C:\MyService.exe”。它说安装成功了,但是当我运行“Services.msc”时,该服务在任何地方都不会显示。如果我进入任务管理器,有一个名为“MyService.vshost.exe”的进程。很肯定不是这样,因为这是一个服务,不是一个过程 有人能给我解释一下吗? 如果我运行Services.msc时应该看到服务? (请记住,这一切都是在本地机器上完成的,根本没有服务器 其他 我正在运行VS2008 编辑: 这一切都是在我的本地机器上完成的,我没有服务器或访问任何服务器。 另外,我甚至不知道该服务是做什么的,我想对其进行调试,这样我就可以浏览代码并了解它是如何工作的(服务内部的代码,而不是服务本身——对于任何一个聪明的人来说,这可能会建议我查看模板) 编辑2: 这些都没用! 每次我尝试一些东西,我都会得到一些关于必须使用NetStart或安装服务的信息 编辑3: 我正在运行VS2008 我打了这个: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe C:\dev\Restarter\bin\Release\Restarter.exe 我明白了: Microsoft(R).NET Framework安装实用程序版本2.0.50727.3053 版权所有(c)微软公司。保留所有权利 正在运行事务处理安装 开始安装的安装阶段。 请参阅C:\dev\Restarter\bin日志文件的内容\ Release\Restarter.exe程序集的进度。 该文件位于C:\dev\Restarter\bin\Release\EDT.Restar 安装日志。 正在安装程序集“C:\dev\Restarter\bin\Release\Restarter.exe”。 受影响的参数包括: logtoconsole= assemblypath=C:\dev\Restarter\bin\Release\Restarter.exe logfile=C:\dev\Restarter\bin\Release\Restarter.InstallLog 安装阶段已成功完成,提交阶段正在开始。 请参阅C:\dev\Restarter\bin日志文件的内容\ Release\Restarter.exe程序集的进度。 该文件位于C:\dev\Restarter\bin\Release\Restar 安装日志。 正在提交程序集“C:\dev\Restarter\bin\Release\Restarter.exe”。 受影响的参数包括: logtoconsole= assemblypath=C:\dev\Restarter\bin\Release\Restarter.exe logfile=C:\dev\Restarter\bin\Release\Restarter.InstallLog 提交阶段已成功完成 已完成事务处理的安装 C:\Program Files\Microsoft Visual Studio 9.0\VC> 然后我去运行->Services.msc 我在那里什么也看不见 任务管理器中有一个名为“Restarter.vshost.exe”的进程 就这样 我只想安装和调试它。 我知道它可以工作(因为它运行并且不会崩溃)。C# 调试Windows服务 脚本,c#,windows-services,debugging,C#,Windows Services,Debugging,我有一个用C写的windows服务。 我已经阅读了所有关于如何调试它的谷歌线程,但我仍然无法让它工作。 我已经运行了“PathTo.NetFramework\InstallUtil.exe C:\MyService.exe”。它说安装成功了,但是当我运行“Services.msc”时,该服务在任何地方都不会显示。如果我进入任务管理器,有一个名为“MyService.vshost.exe”的进程。很肯定不是这样,因为这是一个服务,不是一个过程 有人能给我解释一下吗? 如果我运行Services.m
但是代码是由一位朋友编写的,我想通过在调试模式下浏览来了解底层代码。我建议使用以下模式进行调试:
var ServiceToRun = new SomeService();
if (Environment.UserInteractive)
{
// This used to run the service as a console (development phase only)
ServiceToRun.Start();
Console.WriteLine("Press Enter to terminate ...");
Console.ReadLine();
ServiceToRun.DoStop();
}
else
{
ServiceBase.Run(ServiceToRun);
}
编辑:确保您的目标是控制台应用程序,而不是Windows应用程序,否则它将无法工作。您可以通过将调试器附加到进程来调试它。您可以通过在程序启动时添加一行来完成此操作:
Debugger.Launch ();
添加using语句后:
using System.Diagnostics;
您需要将其放入条件块中,或者在调试完成后将其删除
或者通过运行服务,然后从IDE手动附加到进程:调试->附加到进程..如果您的业务层与windows服务分离,则可以测试运行windows服务之外的所有业务功能
System.Threading.Thread sftpThread = new System.Threading.Thread((ThreadStart)service1);
service1.Start();
为了测试windows服务,我想创建一个测试项目,它是一个控制台应用程序,然后启动一个运行我的服务的新线程
System.Threading.Thread sftpThread = new System.Threading.Thread((ThreadStart)service1);
service1.Start();
我最近将此添加到一个项目中,它对我非常有用。您可以像调试任何其他EXE一样调试它。添加后,转到项目属性,并在调试生成配置的“调试”选项卡中添加命令行参数(/EXE)
<MTAThread()> _
Shared Sub Main()
''
'' let's add a command line parameter so we can run this as a regular exe or as a service
''
If Command().ToUpper() = "/EXE" Then
Dim app As MyService = New MyService()
app.OnStart(Nothing)
Application.Run()
Else
Dim ServicesToRun() As System.ServiceProcess.ServiceBase
' More than one NT Service may run within the same process. To add
' another service to this process, change the following line to
' create a second service object. For example,
'
' ServicesToRun = New System.ServiceProcess.ServiceBase () {New Service1, New MySecondUserService}
'
ServicesToRun = New System.ServiceProcess.ServiceBase() {New MyService}
System.ServiceProcess.ServiceBase.Run(ServicesToRun)
End If
End Sub
_
共享子主目录()
''
“”让我们添加一个命令行参数,以便可以将其作为常规exe或服务运行
''
如果Command().ToUpper()=“/EXE”,则
Dim app As MyService=New MyService()
app.OnStart(无)
Application.Run()
其他的
Dim ServicesToRun()作为System.ServiceProcess.ServiceBase
'同一进程中可能运行多个NT服务。若要添加
'对于此进程的另一个服务,请将以下行更改为
'创建第二个服务对象。例如,
'
'ServicesToRun=New System.ServiceProcess.ServiceBase(){New Service1,New MySecondUserService}
'
ServicesToRun=New System.ServiceProcess.ServiceBase(){New MyService}
System.ServiceProcess.ServiceBase.Run(ServicesToRun)
如果结束
端接头
假设:
1) 您在VS2008 IDE的解决方案中有可用的源代码
如何调试C#服务:
InstallUtil
安装服务。(你好像已经这么做了)bin
文件夹中生成的MyService.exeOnStart()
方法的开头添加如下内容:
while(true)
{
System.Threading.Thread.Sleep(500);
}
System.Threading.Thread.Sleep(500)
Debug->attachtoprocesss…
显示流程
和所有会话中的显示流程
sc create MyService binPath= "C:\Service.exe"
protected override void OnStart(string[] args)
{
#if DEBUG
Debugger.Launch();
#endif
...
}
sc delete MyService
#if DEBUG
MyService myService = new MyService();
myService.OnDebug();
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
#else
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new MyService()
};
ServiceBase.Run(ServicesToRun);
#endif
public void OnDebug()
{
OnStart(null);
}