资源简介

本文共涉及3个工程:beep、install、uninstall。 1) beep工程用于新服务的实现,工程中包含beep.cpp。编译并生成beep.exe,将其拷贝至c:\目录下,供安装程序调用。当安装完毕后,SCM也将调用beep.exe来执行该服务。 2) install工程用于新服务的安装,工程中包含install.cpp。编译并生成install.exe,将其拷贝至:c:\目录中,然后在Windows NT中单击“开始”,再单击“运行”,使用“运行”命令执行带3个参数的installl.exe程序。输入以下命令行进行安装:c:\install.exe BeepService "Beeper" c:\Beep.exe 。其中BeepService是供SCM内部使用的服务名,Beeper是显示在控制面板的服务程序中的名称,"c:\Beep.exe"是服务所在的可执行文件的路径。安装完毕后,你可以在控制面板的服务程序中看到新增的服务Beeper,点击右键选择“属性”,你就可以设置服务的启动类型、服务的状态和启动参数。 3) uninstall工程用于新服务的卸载,工程中包含uninstall.cpp。编译并生成uninstall.exe,将其拷贝至:c:\目录中,然后在Windows NT中单击“开始”,再单击“运行”,使用“运行”命令执行带1个参数的uninstall.exe程序。输入以下命令行进行卸载:c:\uninstall.exe BeepService。其中BeepService就是在安装服务是生成的供SCM内部使用的服务名。

资源截图

代码片段和文件信息

#include  
#include  
#include  
#include  
//#include “yewu.cpp“
//Download by http://www.codefans.net
#define DEFAULT_BEEP_DELAY 3000   // 定义蜂鸣的间隔时间值
char *SERVICE_NAME = “BeepService“; // 定义服务的名称
HANDLE terminateEvent = NULL; // 定义用于控制ServiceMain执行的事件句柄
SERVICE_STATUS_HANDLE serviceStatusHandle; // 定义与SCM通讯的服务状态句柄
int beepDelay = DEFAULT_BEEP_DELAY; // 定义蜂鸣的间隔时间
BOOL pauseService = FALSE; // 定义服务暂停的标志
BOOL runningService = FALSE; // 定义服务运行的标志
HANDLE threadHandle = 0; // 定义实现服务功能的线程句柄

char lpszMac[128];


VOID SendStatusToSCM (DWORD dwCurrentStateDWORD dwWin32ExitCode 
  DWORD dwServiceSpecificExitCodeDWORD dwCheckPointDWORD dwWaitHint)
{
SERVICE_STATUS serviceStatus;
  serviceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;  //设置服务运行在其自身的进程中
serviceStatus.dwCurrentState = dwCurrentState; //设置服务的当前状态
  // 如果服务正在启动,则不接收和处理控制通知事件,否则接收所有的控制通知事件
if (dwCurrentState == SERVICE_START_PENDING) 
serviceStatus.dwControlsAccepted = 0;
else 
serviceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_PAUSE_CONTINUE |SERVICE_ACCEPT_SHUTDOWN;
  /* 如果服务具有特定的出错代码,则设置serviceStatus 的dwWin32ExitCode属性为
ERROR_SERVICE_SPECIFIC_ERROR,并设置serviceStatus的dwServiceSpecificExitCode属性
为特定出错代码,以显示特定的错误信息*/
if (dwServiceSpecificExitCode == 0)
{
serviceStatus.dwWin32ExitCode = dwWin32ExitCode;
serviceStatus.dwServiceSpecificExitCode =0;
}
else
{
serviceStatus.dwWin32ExitCode = ERROR_SERVICE_SPECIFIC_ERROR;
serviceStatus.dwServiceSpecificExitCode =dwServiceSpecificExitCode; //设置服务的特定出错代码
}
  serviceStatus.dwCheckPoint = dwCheckPoint; //设置服务在启动、关闭和运行操作中反映操作进度的值
serviceStatus.dwWaitHint = dwWaitHint; //设置服务在执行启动、关闭和运行操作时将持续的时间值
  SetServiceStatus (serviceStatusHandle &serviceStatus); //更新SCM中服务的状态信息
}


DWORD ServiceThread(LPDWORD param)
{ //使用Sleep函数将while控制流程挂起,然后在指定的毫秒数后自动唤醒
while (1)
{
//GetMacByCmd(lpszMac);
Beep(200200);   //进行蜂鸣
Sleep(beepDelay); //将该线程挂起beepDelay中指定的毫秒数
}
return 0;
}


VOID Handler (DWORD controlCode) 
{
switch(controlCode)
{ // 处理停止服务事件
case SERVICE_CONTROL_STOP:
//通知SCM服务即将停止
SendStatusToSCM(SERVICE_STOP_PENDINGNO_ERROR 0 1 5000);
runningService=FALSE;   //设置服务运行的标志
SetEvent(terminateEvent); //设置终止事件句柄为活动状态,从而使ServiceMain函数得以继续执行
return;
  // 处理暂停服务事件
case SERVICE_CONTROL_PAUSE:
if (runningService && !pauseService)
{
// 通知SCM服务即将暂停
SendStatusToSCM( SERVICE_PAUSE_PENDINGNO_ERROR 0 1 1000);
pauseService = TRUE; //设置服务暂停的标志
SuspendThread(threadHandle);      //挂起新服务的线程
SendStatusToSCM(SERVICE_PAUSED NO_ERROR 0 0 0);     //通知SCM服务暂停
}
break;
  // 处理继续服务事件
case SERVICE_CONTROL_CONTINUE:
if (runningService && pauseService)
{
// 通知SCM服务即将继续
SendStatusToSCM( SERVICE_CONTINUE_PENDINGNO_ERROR 0 1 1000);
pauseService=FALSE;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-12-31 08:17  Service\
     目录           0  2012-12-31 08:17  Service\beep\
     目录           0  2012-12-31 08:17  Service\beep\Debug\
     文件      155737  2012-11-14 08:17  Service\beep\Debug\beep.exe
     文件      177124  2012-11-14 08:17  Service\beep\Debug\beep.ilk
     文件       17559  2012-11-14 08:17  Service\beep\Debug\beep.obj
     文件     3627624  2012-11-13 07:49  Service\beep\Debug\beep.pch
     文件      566272  2012-11-13 07:49  Service\beep\Debug\beep.pdb
     文件      369664  2012-11-14 08:17  Service\beep\Debug\vc60.idb
     文件      274432  2012-11-13 07:49  Service\beep\Debug\vc60.pdb
     文件        5831  2012-11-13 07:49  Service\beep\beep.cpp
     文件        4260  2000-11-07 11:14  Service\beep\beep.dsp
     文件         531  2000-11-07 11:07  Service\beep\beep.dsw
     文件       50176  2012-11-14 08:17  Service\beep\beep.ncb
     文件       48640  2012-11-14 08:17  Service\beep\beep.opt
     文件         734  2012-11-14 08:17  Service\beep\beep.plg
     文件        6533  2012-11-12 09:51  Service\beep\yewu.cpp
     目录           0  2012-12-31 08:17  Service\install\
     目录           0  2012-12-31 08:17  Service\install\Debug\
     文件      151647  2012-11-14 08:18  Service\install\Debug\install.exe
     文件      162896  2012-11-14 08:18  Service\install\Debug\install.ilk
     文件       11762  2012-11-14 08:18  Service\install\Debug\install.obj
     文件     3611192  2012-11-11 17:00  Service\install\Debug\install.pch
     文件      402432  2012-11-13 07:50  Service\install\Debug\install.pdb
     文件      148480  2012-11-14 08:18  Service\install\Debug\vc60.idb
     文件       86016  2012-11-12 11:42  Service\install\Debug\vc60.pdb
     文件        1067  2012-11-12 11:41  Service\install\install.cpp
     文件        4296  2000-11-07 11:15  Service\install\install.dsp
     文件         537  2000-11-07 11:14  Service\install\install.dsw
     文件       41984  2012-11-14 08:19  Service\install\install.ncb
     文件       48640  2012-11-14 08:19  Service\install\install.opt
............此处省略17个文件信息

评论

共有 条评论