● 如何debug Windows服务
传统方式:记录log到文件,然后查看log。
其他方式:
1、项目属性-输出类型,更改为控制台应用程序
;
2、修改Porgram.cs:
// 注释掉
// ServiceBase.Run(ServicesToRun);
// 使用RunInteractive执行原有Service功能
RunInteractive(ServicesToRun);
增加方法:
static void RunInteractive(ServiceBase[] servicesToRun)
{
// 利用Reflection取得非公开的 OnStart() 方法信息
MethodInfo onStartMethod = typeof(ServiceBase).GetMethod("OnStart",
BindingFlags.Instance | BindingFlags.NonPublic);
// 执行 OnStart 方法
foreach (ServiceBase service in servicesToRun)
{
Console.Write("Starting {0}...", service.ServiceName);
onStartMethod.Invoke(service, new object[] { new string[] { } });
Console.Write("Started");
}
Console.WriteLine("Press any key to stop the services");
Console.ReadKey();
// 利用Reflection取得非公开的 OnStop() 方法信息
MethodInfo onStopMethod = typeof(ServiceBase).GetMethod("OnStop",
BindingFlags.Instance | BindingFlags.NonPublic);
// 执行 OnStop 方法
foreach (ServiceBase service in servicesToRun)
{
Console.Write("Stopping {0}...", service.ServiceName);
onStopMethod.Invoke(service, null);
Console.WriteLine("Stopped");
}
}