📜  系统服务启动和停止(1)

📅  最后修改于: 2023-12-03 14:56:45.790000             🧑  作者: Mango

系统服务启动和停止

在Windows操作系统中,系统服务通常是在系统启动时以系统身份自动启动的程序,这些服务可以在后台运行并为其他程序或用户提供支持和功能。在编写Windows应用程序时,我们有时需要在代码中控制系统服务的启动和停止,以便我们的程序能够与其交互或依赖它们提供的功能。

主要任务

我们需要执行以下主要任务来启动和停止系统服务:

  1. 获取服务控制管理器句柄
  2. 打开要启动或停止的服务
  3. 向服务管理器发送控制代码以启动或停止服务
  4. 关闭服务句柄
获取服务控制管理器句柄

我们首先需要获取一个服务控制管理器句柄,以便我们可以打开指定的服务并发送控制代码。我们可以使用Windows API函数 OpenSCManager() 来获取服务控制管理器句柄。

SC_HANDLE scManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (scManager == NULL) {
    // 处理句柄获取失败的情况
}

使用 OpenSCManager() 函数时,第一个参数为机器名,如果为 NULL 则表示本地计算机;第二个参数为数据库名,服务控制管理器只有一个数据库,因此也应该为 NULL。第三个参数为访问权限,我们在本例中需要具有完全访问权限。

打开要启动或停止的服务

获取服务控制管理器句柄后,我们需要使用服务名称打开要启动或停止的服务,以便我们可以向其发送控制代码。我们可以使用Windows API函数 OpenService() 来打开服务。

SC_HANDLE myService = OpenService(scManager, "SERVICE_NAME", SERVICE_ALL_ACCESS);
if (myService == NULL) {
    // 处理服务打开失败的情况
}

OpenService() 函数中,第一个参数为上面获取的服务控制管理器句柄,第二个参数为服务名称;第三个参数为访问权限。

向服务管理器发送控制代码以启动或停止服务

打开服务后,我们可以向其发送不同的控制代码以执行不同的操作。对于启动和停止服务,我们可以分别使用Windows API函数 StartService()ControlService()

启动服务:

if (!StartService(myService, 0, NULL)) {
    // 处理服务启动失败的情况
}

停止服务:

SERVICE_STATUS status;
if (!ControlService(myService, SERVICE_CONTROL_STOP, &status)) {
    // 处理服务停止失败的情况
}

ControlService() 函数中,第一个参数为服务句柄;第二个参数为要发送的控制代码,此处为 SERVICE_CONTROL_STOP 表示停止服务;第三个参数为服务状态返回值。

关闭服务句柄

完成操作后,我们需要关闭服务句柄和服务控制管理器句柄。

CloseServiceHandle(myService);
CloseServiceHandle(scManager);

以上就是使用C++代码控制Windows系统服务启动和停止的基本步骤。