关于写Windows service程序启动和停止需要注意的几个地方
来源:互联网 发布:linux jvm 参数设置 编辑:程序博客网 时间:2024/05/22 13:13
写一个Windows servicer服务程序, 尽管有现成的模式可以套用但是有几个地方还是值得注意:
1、在exe 的main 函数首先需要 声明 如下的数组:
SERVICE_TABLE_ENTRY dispatchTable[] =
{
{ TEXT(SZSERVICENAME), (LPSERVICE_MAIN_FUNCTION)service_main},
{ NULL, NULL}
};
// Install , remove 或者 debug
if (!StartServiceCtrlDispatcher(dispatchTable))
AddToMessageLog(TEXT("StartServiceCtrlDispatcher failed."));
2、在service_main里面需要注册ctrlhander函数
...
sshStatusHandle = RegisterServiceCtrlHandler( TEXT(SZSERVICENAME),service_ctrl);
//SetServiceStatus
ServiceStart( dwArgc, lpszArgv);
//SetServiceStatus
...
3、当程序进入ServiceStart模块,执行用户定义的任务代码模块后,一定要及时地多次向SCM进行状态汇报,否则SCM收不到响应;
4、当用户点击SCM管理工具的“停止”按钮,SCM将触发 SCP控制进程,系统将执行以下的响应代码:
VOID WINAPI service_ctrl(DWORD dwCtrlCode)
{
// Handle the requested control code.
//
switch (dwCtrlCode)
{
// Stop the service.
//
// SERVICE_STOP_PENDING should be reported before
// setting the Stop Event - hServerStopEvent - in
// ServiceStop(). This avoids a race condition
// which may result in a 1053 - The Service did not respond...
// error.
case SERVICE_CONTROL_STOP:
ReportStatusToSCMgr(SERVICE_STOP_PENDING, NO_ERROR, 0);
ServiceStop();
ReportStatusToSCMgr(SERVICE_STOPPED, NO_ERROR, 0);
return;
// Update the service status.
//
case SERVICE_CONTROL_INTERROGATE:
break;
// invalid control code
//
default:
break;
}
ReportStatusToSCMgr(ssStatus.dwCurrentState, NO_ERROR, 0);
}
停止过程中,进程同样需要及时向SCM汇报状态,否则,SCM接收不到状态反馈。
5、启动和停止过程中,如果SCM管理工具收不到状态反馈的话,将弹出以下提示:
运行时错误: 错误 1053: 服务没有及时响应启动或控制请求。
6、综上所述:当服务进程启动和停止的过程中,一定要及时多次地向SCM汇报状态,否则SCM无法响应。
- 关于写Windows service程序启动和停止需要注意的几个地方
- 在BrodcastReceiver和Service内启动Activit和弹出dialog需要注意的地方
- activity启动service需要注意的一个地方
- java打包exe程序需要注意的几个地方
- 关于循环语句中的几个需要注意的地方
- activity生命周期和启动模式的需要注意的地方
- 处理XML需要注意的几个地方
- ldconfig几个需要注意的地方
- 引用计数需要注意的几个地方
- ldconfig几个需要注意的地方
- java 需要注意的几个地方
- ldconfig几个需要注意的地方
- HTML 几个需要注意的地方
- ldconfig几个需要注意的地方
- Python语言需要注意的几个地方
- 默认实参需要注意的几个地方
- Lora程序设计需要注意的几个地方
- 比赛时需要注意的几个地方
- 入门视频采集与处理(BT656简介)
- String StringBuffer StringBuilder 三者的区别
- QT 常用部件 (四)自动完成LineEdit
- isbn
- 汇文问题汇总+ORACLE
- 关于写Windows service程序启动和停止需要注意的几个地方
- 【C#】程序分析——泛型
- 抠图
- opencv细节
- C++笔记
- ORM 的功能
- 英语语法顺口溜
- Exercise: WindowsAzureRoleCommunicationVS2010Lab
- 运用ajax应用开始时基本实现功能代码