Easy Command Line Service






4.56/5 (8投票s)
一个用于创建和管理服务的简单 DOS 框架。
引言
我之前发表的一篇文章中,很多人问过我“它能作为服务运行吗?” 答案总是“不能”。 使用本文中的代码作为起点,开发者将能够编写自己的服务。 这段代码非常感谢 MSDN,我最初是在那里找到的教程。 我想链接到那篇文章,但现在找不到它了。
背景
开发者应该有一个Debug View的副本,以便他们可以看到程序的输出。 Debug View 是 SysInternals 套件的一部分,这是一套为任何对探测 Windows 应用程序及其与操作系统的交互感兴趣的开发者提供的绝佳工具。
使用代码
编译后的代码会生成一个名为 cls.exe 的可执行文件,它是“命令行服务”的缩写。 使用命令 cls.exe -install 安装服务,使用 cls.exe -uninstall 卸载服务。 您可以使用 Debug View 查看这些操作的输出。
有两个主要的类实现创建、删除、管理、启动和停止服务。 它们是 CNTService 和 CMyService。 CNTService 是基类,负责执行繁重的工作的样板代码。 这包括安装、卸载以及服务可以通过服务小程序接收到的所有事件。 CMyService 是一个从 CNTService 派生的类。 我们可以在这里自定义并实现我们希望服务执行的代码。
class CMyService : public CNTService
{
public:
CMyService();
virtual BOOL OnInit();
virtual void Run();
virtual BOOL OnUserControl(DWORD dwOpcode);
virtual void OnStop();
protected:
void SaveStatus();
bool m_bRun;
};
要将您的自定义行为添加到服务,只需将您的代码放在“Run”函数中。 当此函数返回时,服务将停止。 由于服务通常是一个持续运行的进程,因此通常会放置一种机制,可能类似于此
void CMyService::Run()
{
DebugMsg(L"Entering CMyService::Run()\n");
do
{
// Do something here
}
while (m_bRun);
DebugMsg(L"Leaving CMyService::Run()\n");
}
就这样了。 现在您已经掌握了一个易于使用的 Win32 C++ 高性能服务模块模板,您可以执行您可能想在服务中执行的任何操作。
历史
- 2012年11月16日 - 提交文章