C编写Windows服务程序的五个步骤
敬业的IT人
互联网
佚名
2008-1-3 20:23:12
Windows服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务。为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择。本文将建立并实现一个简单的服务程序,其功能是查询系统中可用物理内存数量,然后将结果写入一个文本文件。最后,你可以用所学知识编写自己的 Windows 服务。
当初我写第一个NT 服务时,我到 MSDN 上找例子。在那里我找到了一篇 Nigel Thompsborder="0" alt="C编写Windows服务程序的五个步骤" />
第四步:安装和配置服务
程序编好了,将之编译成 exe 文件。本文例子创建的文件叫 MemoryStatus.exe,将它拷贝到 C:\MyServices 文件夹。为了在机器上安装这个服务,需要用 SC.EXE 可执行文件,它是 Win32 Platform SDK 中附带的一个工具。(译者注:Visaul Studio .NET2003 IDE 环境中也有这个工具,具体存放位置在:C:\Program Files\Microsoft Visual Studio .NET 2003\Commborder="0" alt="C编写Windows服务程序的五个步骤" />
MemoryStatus 的启动类型是手动,也就是说根据需要来启动这个服务。右键单击该服务,然后选择上下文菜单中的“属性”菜单项,此时显示该服务的属性窗口。在这里可以修改启动类型以及其它设置。你还可以从“常规”标签中启动/停止服务。以下是从系统中移除服务的方法:
sc delete MemoryStatus
指定 “delete” 选项和服务名。此服务将被标记为删除,下次西通重启后,该服务将被完全移除。
第五步:测试服务
从服务控制面板启动 MemoryStatus 服务。如果初始化不出错,表示启动成功。过一会儿将服务停止。检查一下 C:\MyServices 文件夹中 memstatus.txt 文件的服务输出。在我的机器上输出是这样的:
Monitoring started.
273469440
273379328
273133568
273084416
Monitoring stopped.
为了测试 MemoryStatus 服务在出错情况下的行为,可以将 memstatus.txt 文件设置成只读。这样一来,服务应该无法启动。
去掉只读属性,启动服务,在将文件设成只读。服务将停止执行,因为此时日志文件写入失败。如果你更新服务控制面板的内容,会发现服务状态是已经停止。
开发更大更好的服务程序
理解 Win32 服务的基本概念,使你能更好地用 C++来设计包装类。包装类隐藏了对底层 Win32 函数的调用并提供了一种舒适的通用接口。修改 MemoryStatus 程序代码,创建满足自己需要的服务!为了实现比本文例子所示范的更复杂的任务,你可以创建多线程的服务,将作业划分成几个工作者线程并从 ServiceMain 函数中监视它们的执行。
当初我写第一个NT 服务时,我到 MSDN 上找例子。在那里我找到了一篇 Nigel Thompsborder="0" alt="C编写Windows服务程序的五个步骤" />
第四步:安装和配置服务
程序编好了,将之编译成 exe 文件。本文例子创建的文件叫 MemoryStatus.exe,将它拷贝到 C:\MyServices 文件夹。为了在机器上安装这个服务,需要用 SC.EXE 可执行文件,它是 Win32 Platform SDK 中附带的一个工具。(译者注:Visaul Studio .NET2003 IDE 环境中也有这个工具,具体存放位置在:C:\Program Files\Microsoft Visual Studio .NET 2003\Commborder="0" alt="C编写Windows服务程序的五个步骤" />
- ·Windows下的常用的DOS命令
·玩出个性 Windows桌面十大应用技巧
·Windows下Ping命令详解及使用小技巧
·Windows“虚拟内存不够”的几个可能
·Windows无法访问指定设备,路径或文件.
·Windows远程控制完全指南
·电脑小绝技,Windows快捷键大全
·推荐! Windows虚拟内存问题详解
·Windows造字功能详解
·巧妙破解Windows屏保密码
MemoryStatus 的启动类型是手动,也就是说根据需要来启动这个服务。右键单击该服务,然后选择上下文菜单中的“属性”菜单项,此时显示该服务的属性窗口。在这里可以修改启动类型以及其它设置。你还可以从“常规”标签中启动/停止服务。以下是从系统中移除服务的方法:
sc delete MemoryStatus
指定 “delete” 选项和服务名。此服务将被标记为删除,下次西通重启后,该服务将被完全移除。
第五步:测试服务
从服务控制面板启动 MemoryStatus 服务。如果初始化不出错,表示启动成功。过一会儿将服务停止。检查一下 C:\MyServices 文件夹中 memstatus.txt 文件的服务输出。在我的机器上输出是这样的:
Monitoring started.
273469440
273379328
273133568
273084416
Monitoring stopped.
为了测试 MemoryStatus 服务在出错情况下的行为,可以将 memstatus.txt 文件设置成只读。这样一来,服务应该无法启动。
去掉只读属性,启动服务,在将文件设成只读。服务将停止执行,因为此时日志文件写入失败。如果你更新服务控制面板的内容,会发现服务状态是已经停止。
开发更大更好的服务程序
理解 Win32 服务的基本概念,使你能更好地用 C++来设计包装类。包装类隐藏了对底层 Win32 函数的调用并提供了一种舒适的通用接口。修改 MemoryStatus 程序代码,创建满足自己需要的服务!为了实现比本文例子所示范的更复杂的任务,你可以创建多线程的服务,将作业划分成几个工作者线程并从 ServiceMain 函数中监视它们的执行。
- 最新文章
- C语言基础教程(六)Turbo C 程序设计初[01-03]
- 在vc++系统中编译和运行c语言[01-03]
- C语言程序设计经典实例之十[01-03]
- C语言中的面向对象(1)-类模拟和多态,继承[01-03]
- 内存调试技巧:C 语言最大难点揭秘[01-03]
- 从C++转到Java 如何把握关键[01-03]
- 相关文章
- 初级 WINDOWS API C++语言版 编程(2)[01-03]
- 用C语言编写Windows服务程序的五个步骤[01-03]
- VB应用程序中用DDE功能开发AutoCADforWindo..[01-03]
- VB中调用WindowsAPI的注意事项[01-03]
- 读取和修改Windows注册表[01-03]
- 在VB编程中采用Windows脚本控件实现程序脚本化[01-03]
