Windows服务(四)

Windows服务(四)


这里是对网上经典的C写Windows Service的学习


文章提出C写个Windows Service五个步骤就可以


如果启动服务,可以在cmd中输入 service.msc /s


五个步骤:
一.主函数


void main() 

    SERVICE_TABLE_ENTRY ServiceTable[2];
    ServiceTable[0].lpServiceName = "MemoryStatus";
    ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
    
    ServiceTable[1].lpServiceName = NULL;
    ServiceTable[1].lpServiceProc = NULL;


    // 启动服务的控制分派机线程
    StartServiceCtrlDispatcher(ServiceTable); 
}


做了一件事情,就是创建分派表并启动控制分派机
分派表的最后一项必须是服务名和服务主函数域的 NULL 指针


二.ServiceMain函数
RegisterServiceCtrlHadler 函数注册完控制处理器
下面是要汇报服务的状态
初始化 ServiceStatus 结构
dwServiceType:指示服务类型,创建 Win32 服务。赋值 SERVICE_WIN32; 
dwCurrentState:指定服务的当前状态。因为服务的初始化在这里没有完成,所以这里的状态为 SERVICE_START_PENDING; 
dwControlsAccepted:这个域通知 SCM 服务接受哪个域。本文例子是允许 STOP 和 SHUTDOWN 请求。 
dwWin32ExitCode 和 dwServiceSpecificExitCode:这两个域在你终止服务并报告退出细节时很有用。初始化服务时并不退出,因此,它们的值为 0; 
dwCheckPoint 和 dwWaitHint:这两个域表示初始化某个服务进程时要30秒以上。


三.处理控制请求


四.安装和配置
写了这么个程序,如何安装
工具:SC.EXE它是win32 platform sdk的一个tool
下面是文章中一个例子
sc create MemoryStatus binpath= c:\MyServices\MemoryStatus.exe
发出此创建命令。指定服务名和二进制文件的路径(注意 binpath= 和路径之间的那个空格)。安装成功后,便可以用服务控制面板来控制这个服务。用控制面板的工具栏启动和终止这个服务。
 MemoryStatus 的启动类型是手动,也就是说根据需要来启动这个服务。右键单击该服务,然后选择上下文菜单中的“属性”菜单项,此时显示该服务的属性窗口。在这里可以修改启动类型以及其它设置。你还可以从“常规”标签中启动/停止服务。以下是从系统中移除服务的方法:


sc delete MemoryStatus
指定 “delete” 选项和服务名。此服务将被标记为删除,下次西通重启后,该服务将被完全移除。


五.测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值