c怎么写服务( 四 )


在本例子程序中就只接收SERVICE_ACCEPT_SHUTDOWN和SERVICE_ACCEPT_STOP消息 , 这是通过前面给servicestatus赋值设定的 。这样一个基本的服务程序就完成了 。
下面贴出我的示例代码仅供参考 。该代码在vs2008中调试通过 。
本文结束的时候会附上如何安装服务 。#include#include #define SLEEP_TIME 5000 //间隔时间 #define FILE_PATH "C:\\log.txt" //信息输出文件 bool brun=false; SERVICE_STATUS servicestatus; SERVICE_STATUS_HANDLE hstatus; int WriteToLog(char* str); void WINAPI ServiceMain(int argc, char** argv); void WINAPI CtrlHandler(DWORD request); int InitService(); int WriteToLog(char* str) { FILE* pfile; fopen_s(&pfile,FILE_PATH,"a+"); if (pfile==NULL) { return -1; } fprintf_s(pfile,"%s\n",str); fclose(pfile); return 0; } void WINAPI ServiceMain(int argc, char** argv) { servicestatus.dwServiceType = SERVICE_WIN32; servicestatus.dwCurrentState = SERVICE_START_PENDING; servicestatus 。
6. 用C#写了一个控制台程序,如何让它作为服务来运行 要把应用程序添加为服务 , 你需要两个小软件:Instsrv.exe和Srvany.exe 。
Instsrv.exe可以给系统安装和删除服务 , Srvany.exe可以让程序以服务的方式运行 。这两个软件都包含在Windows NT Resource Kit里 。
【c怎么写服务】把这两个程序保存在一个方便的位置 , 例如C盘根目录下 。
我们举例来说明 , 把OE作为一个服务添加进Windows XP Professional操作系统中 , 并把这个服务命名为“Mail” 。
在运行中输入“CMD” , 回车 , 打开命令行窗口 , 在提示符后面直接输入:“c:\instsrv.exe Mail c:\srvany.exe”然后回车 , 其中的“c:\instsrv.exe”和“c:\srvany.exe”表示这两个程序保存的位置 , 而Mail则是你想添加的服务名称 。
运行Regedit打开注册表编辑器 , 在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下 , 找到刚才添加的Mail , 点击右键 , 新建一个键 , 命名为“Parameters” , 点击新建的Parameters , 并再次新建一个名称为“Application”的子键 , 数据类型为“REG_SZ” , 数值为希望作为服务运行的程序的所在位置 , 如果你的Windows系统安装在C盘下 , 那么OE的程序位置就是C:\Program Files\Outlook Express\msimn.exe  , 把这个路径添入数值中 。
到现在 , 这个服务已经成功的添加并且设置好了 。如果你希望做的更加专业 , 可以在Mail服务下建立一个名为Description的子键 , 数据类型同样为REG_SZ , 数值可以写一些你对这个服务的描述 , 这个我们在后面可以看到 。
接下来需要对服务做一些额外的设置 , 在运行中输入“Services.msc”并回车 , 在列表中找到我们刚添加的Mail服务 , 双击打开 , 来做详细的设置 。
在“General”选项卡上 , 我们需要设置这个服务的运行方式 , 可以看见 , 作为一个服务 , 有“自动(Automatic)” , “手动(Manual)”和“禁止(Disabled)”三种启动类型 , 按照需要 , 我们一般设置成自动就可以了 。而在“Logon”选项卡下可以设置以什么身份运行这个服务 , 一般可以不用理会 , 按照默认的设置 。“Recovery”选项卡下则是进行恢复设置的 , 你可以指定 , 在服务第一次 , 第二次和第三次出错之后分别采取什么措施 。“Dependencies”则显示了服务之间的依存关系 , 可以让你察看这个服务的运行依赖哪些其它服务 , 以及还有什么服务依赖于这个服务 。这后面几个对我们一般用户没有什么意义 。经过这些设置 , 你的服务已经完全可以正常工作了 。