启动和停止Windows服务程序需向SCM汇报状态
来源:互联网 发布:js函数封装与调用 编辑:程序博客网 时间:2024/06/06 07:46
启动和停止Windows service服务程序,要注意及时把状态汇报给SCM:
1、在 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无法响应。
1、在 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服务程序需向SCM汇报状态
- c# windows服务状态、启动和停止服务
- 命令行方式 启动和停止 windows服务
- VC启动和停止windows系统服务
- .net 启动和停止Windows服务
- windows下快速启动和停止服务
- 用代码启动和停止Windows服务
- windows启动停止服务
- linux系统查看服务状态和启动停止服务
- Win2000/XP安装软件时提示“无法访问windows安装程序,服务中windows Installer状态为停止,不能启动”
- 启动和停止服务
- windows NT 服务程序的创建,删除,启动,停止
- windows NT 服务程序的创建,删除,启动,停止
- delphi启动停止windows服务
- C#启动停止windows服务
- C#启动,停止Windows服务
- Web启动,停止Windows服务
- Linux查看服务的启动状态,并且启动和停止服务的方法
- No 117 · 定义hashtable(全局使用)
- ci dx_auth认证
- Get encoder clsid
- 在Linux里设置环境变量的方法(export PATH)
- VBS读取cmd命令的输出,VBS执行程序后重定向到VBS
- 启动和停止Windows服务程序需向SCM汇报状态
- 获取系统语言
- 拷贝CString到Clipboard和从Clipboard得到数据
- 归一化互相关(NCC)对噪声如此敏感
- 1930. 排序
- 我的第一篇博客,这几天的学习总结和感言,
- maven2之m2eclipse使用手册之四编写通用Dao实例(一)
- PostgreSQL之精妙的数据库导入导出工具架构 (十二)
- MES项目导入-导入注意点-离散制造企业导入ERP