windows系统服务程序的开发
2007-12-05 10:20
567 查看
SERVICE_STATUS ServiceStatus; SERVICE_STATUS_HANDLE hStatus;
int main() // 初始化服务列表,把当前服务加入到服务控件管理器中 { SERVICE_TABLE_ENTRY ServiceTable[2]; ServiceTable[0].lpServiceName = "PrinterServer"; ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
// 哨兵 ServiceTable[1].lpServiceName = NULL; ServiceTable[1].lpServiceProc = NULL; // Start the control dispatcher thread for our service 连接到服务控制管理器 StartServiceCtrlDispatcher(ServiceTable); return 0; }
void WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv) //ServiceMain() { ServiceStatus.dwServiceType = SERVICE_WIN32; ServiceStatus.dwCurrentState = SERVICE_START_PENDING; ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwServiceSpecificExitCode = 0; ServiceStatus.dwCheckPoint = 0; ServiceStatus.dwWaitHint = 0;
hStatus = RegisterServiceCtrlHandler( "PrinterServer", (LPHANDLER_FUNCTION)ControlHandler); if (hStatus == (SERVICE_STATUS_HANDLE)0) { // Registering Control Handler failed return ; } // Initialize Service int error = InitService(); if (error == -1) { // Initialization failed ServiceStatus.dwCurrentState = SERVICE_STOPPED; ServiceStatus.dwWin32ExitCode = -1; SetServiceStatus(hStatus, &ServiceStatus); return; } ////// We report the running status to SCM. ServiceStatus.dwCurrentState = SERVICE_RUNNING; SetServiceStatus (hStatus, &ServiceStatus);
// 以下为主处理程序
}
// Control Handler 用于响应服务控件器的各个事件,此件处理了"stop","shut" void ControlHandler(DWORD request) { switch(request) { case SERVICE_CONTROL_STOP: OutputDebugString("Monitoring stopped."); WriteToLog("Monitoring stopped.");
ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwCurrentState = SERVICE_STOPPED; SetServiceStatus (hStatus, &ServiceStatus); return;
case SERVICE_CONTROL_SHUTDOWN: OutputDebugString("Monitoring stopped."); WriteToLog("Monitoring stopped.");
ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwCurrentState = SERVICE_STOPPED; SetServiceStatus (hStatus, &ServiceStatus); return; default: break; } // Report current status SetServiceStatus (hStatus, &ServiceStatus); return; }
// 以下为服务安装脚本
[Version] Signature="$WINDOWS NT$" [DefaultInstall.Services] AddService=PrinterServer,,My_Printer_Server [My_Printer_Server] DisplayName= Printer Server Description=提供对打印数据的截取功能。 // 如果想设置为“允许服务与桌面交互”类型,则把serviceType设置为110 ServiceType=0x10 StartType=2 ErrorControl=1 ServiceBinary=D:/PrinterServer.exe
// 以下为卸载服务脚本
[Version] Signature="$WINDOWS NT$" [DefaultInstall.Services] DelService=PrinterServer
如果启动服务失败,请先确认是否缺少以下四个动态库:
MFC71.dll
Msvcp71.dll
Msvcr71.dll
Msvcrt.dll
int main() // 初始化服务列表,把当前服务加入到服务控件管理器中 { SERVICE_TABLE_ENTRY ServiceTable[2]; ServiceTable[0].lpServiceName = "PrinterServer"; ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
// 哨兵 ServiceTable[1].lpServiceName = NULL; ServiceTable[1].lpServiceProc = NULL; // Start the control dispatcher thread for our service 连接到服务控制管理器 StartServiceCtrlDispatcher(ServiceTable); return 0; }
void WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv) //ServiceMain() { ServiceStatus.dwServiceType = SERVICE_WIN32; ServiceStatus.dwCurrentState = SERVICE_START_PENDING; ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwServiceSpecificExitCode = 0; ServiceStatus.dwCheckPoint = 0; ServiceStatus.dwWaitHint = 0;
hStatus = RegisterServiceCtrlHandler( "PrinterServer", (LPHANDLER_FUNCTION)ControlHandler); if (hStatus == (SERVICE_STATUS_HANDLE)0) { // Registering Control Handler failed return ; } // Initialize Service int error = InitService(); if (error == -1) { // Initialization failed ServiceStatus.dwCurrentState = SERVICE_STOPPED; ServiceStatus.dwWin32ExitCode = -1; SetServiceStatus(hStatus, &ServiceStatus); return; } ////// We report the running status to SCM. ServiceStatus.dwCurrentState = SERVICE_RUNNING; SetServiceStatus (hStatus, &ServiceStatus);
// 以下为主处理程序
}
// Control Handler 用于响应服务控件器的各个事件,此件处理了"stop","shut" void ControlHandler(DWORD request) { switch(request) { case SERVICE_CONTROL_STOP: OutputDebugString("Monitoring stopped."); WriteToLog("Monitoring stopped.");
ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwCurrentState = SERVICE_STOPPED; SetServiceStatus (hStatus, &ServiceStatus); return;
case SERVICE_CONTROL_SHUTDOWN: OutputDebugString("Monitoring stopped."); WriteToLog("Monitoring stopped.");
ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwCurrentState = SERVICE_STOPPED; SetServiceStatus (hStatus, &ServiceStatus); return; default: break; } // Report current status SetServiceStatus (hStatus, &ServiceStatus); return; }
// 以下为服务安装脚本
[Version] Signature="$WINDOWS NT$" [DefaultInstall.Services] AddService=PrinterServer,,My_Printer_Server [My_Printer_Server] DisplayName= Printer Server Description=提供对打印数据的截取功能。 // 如果想设置为“允许服务与桌面交互”类型,则把serviceType设置为110 ServiceType=0x10 StartType=2 ErrorControl=1 ServiceBinary=D:/PrinterServer.exe
// 以下为卸载服务脚本
[Version] Signature="$WINDOWS NT$" [DefaultInstall.Services] DelService=PrinterServer
如果启动服务失败,请先确认是否缺少以下四个动态库:
MFC71.dll
Msvcp71.dll
Msvcr71.dll
Msvcrt.dll
相关文章推荐
- 将Java程序变成Windows系统服务-Java基础-Java-编程开发
- windows 7 后台服务程序开发
- C# 开发Windows服务程序并在计算机上注册服务
- WCF实现从mac系统到windows的跨平台 iPhone程序开发实现
- WINDOWS登录系统之前(欢迎界面)运行指定程序脚本服务
- 用C#开发Windows服务监控系统使用
- .Net下的Windows服务程序开发指南.
- windows系统卸载程序不彻底,系统服务中有残留如何删除
- Delphi开发Windows服务程序
- 使用Java Service Wrapper 把Java程序作为Windows系统服务
- C#Windows服务程序开发实例浅析
- windows中系统开机自动运行程序和自动启动服务
- Windows服务程序开发介绍
- Net下的Windows服务程序开发指南. (转)
- VC++6.0开发Windows服务程序。
- windows服务程序开发详解
- 掌握C/C++之后,如何在Windows系统下开发有界面的程序?
- c#开发Windows服务程序指南
- Windows环境下注册Java程序为系统服务
- Vc 开发windows的服务程序