65.9K
CodeProject 正在变化。 阅读更多。
Home

CServiceHelper

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.94/5 (26投票s)

2002年5月21日

CPOL

3分钟阅读

viewsIcon

207757

downloadIcon

2553

一个用于安装、卸载、启动、停止、暂停、继续 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 等几位绅士的非常有用的回复,仅举几例那些真正的好心人,他们以非常友好的方式帮助我。 我非常感谢他们帮助我纠正了我的错误方法。

© . All rights reserved.