CServiceHelper






4.94/5 (26投票s)
一个用于安装、卸载、启动、停止、暂停、继续 Win32 服务的简单类
引言
CServiceHelper
类是我在分发服务程序时编写的,当时我发现我不得不重复编写程序来安装服务、卸载服务,而且经常还要编写另一个程序来启动/停止服务。 因此,我编写了一个简单的类,让我可以轻松地安装、删除、启动、停止、暂停和继续 Win32 服务。 该类的性质和用途非常简单,并不是一个详尽的类,因为您可能希望对服务执行许多其他操作。 但我已经涵盖了最常用的操作,如果有人想扩展这个类,非常欢迎他们这样做。 在安装服务时,我只允许两个最常见的选项 - 自动启动和手动启动服务。 还有其他选项可用,正如我已经说过的,如果有人想增强这个类,我将非常高兴。
CServiceHelper 成员
BOOL CServiceHelper::Create()
此函数用于在目标计算机上安装服务。 成功时返回 true
,失败时返回 false
。
CServiceHelper m_sh; m_sh.SetServiceDisplayName("Hello Service 2000"); m_sh.SetServiceName("HelloService2000"); m_sh.SetServicePath("D:\\nish\\Hello2000.exe"); m_sh.SetAutoStart(true); m_sh.Create();
BOOL CServiceHelper::Delete()
此函数用于从目标计算机卸载服务。 成功时返回 true
,失败时返回 false
。
CServiceHelper m_sh;
m_sh.SetServiceName("HelloService2000");
m_sh.Delete();
BOOL CServiceHelper::Start()
此函数用于启动安装在目标计算机上的服务。 成功时返回 true
,失败时返回 false
。
CServiceHelper m_sh;
m_sh.SetServiceName("HelloService2000");
m_sh.Start();
BOOL CServiceHelper::Stop()
此函数用于停止安装在目标计算机上的正在运行的服务。 成功时返回 true
,失败时返回 false
。
CServiceHelper m_sh;
m_sh.SetServiceName("HelloService2000");
m_sh.Stop();
BOOL CServiceHelper::Pause()
此函数用于暂停安装在目标计算机上的正在运行的服务。 成功时返回 true
,失败时返回 false
。
CServiceHelper m_sh;
m_sh.SetServiceName("HelloService2000");
m_sh.Pause();
BOOL CServiceHelper::Continue()
此函数用于继续安装在目标计算机上的已暂停的服务。 成功时返回 true
,失败时返回 false
。
CServiceHelper m_sh;
m_sh.SetServiceName("HelloService2000");
m_sh.Continue();
void CServiceHelper::SetServiceName(LPCTSTR str)
此函数用于设置服务名称,并且必须在调用任何主要函数之前强制调用。
m_sh.SetServiceName("HelloService2000");
void CServiceHelper::SetServiceDisplayName(LPCTSTR str)
此函数用于设置服务的显示名称。 应在调用 Create()
之前调用它
m_sh.SetServiceDisplayName("Hello Service 2000");
void CServiceHelper::SetServicePath(LPCTSTR str)
此函数用于设置服务可执行文件的路径。 应在调用 Create()
之前调用它
m_sh.SetServicePath("D:\\nish\\Hello2000.exe");
void CServiceHelper::SetAutoStart(BOOL b)
此函数用于设置服务是在启动时自动启动还是由用户手动启动。 如果要自动启动,请将其设置为 true
,否则设置为 false
。
m_sh.SetAutoStart(true);
技巧
实际上,您可以使用该类的一个实例来处理多个服务。 只需更改 m_serviceinfo
结构的成员并调用所需的函数即可。 我将在下面展示一个简单的例子。
CServiceHelper m_sh; m_sh.SetServiceName("HelloService2000"); m_sh.Stop(); //we stop the old service m_sh.SetServiceName("HelloService3000"); m_sh.Start(); //and start the new one
历史
在我发布这个类后的 6 小时内,我因采用的非面向对象方法而受到严厉批评。 因此,我在 Lounge 上提出了一个问题,并得到了 Chris Losinger、John Simmons、Kilowatt、Tim Smith、Nemenja、Michael Butler、James T Johnson 等几位绅士的非常有用的回复,仅举几例那些真正的好心人,他们以非常友好的方式帮助我。 我非常感谢他们帮助我纠正了我的错误方法。