如何在 C++ 中以编程方式删除 Windows 服务

how to programatically remove windows service in c++

本文关键字:方式 删除 Windows 服务 编程 C++      更新时间:2023-10-16

我有一个服务的名称,我想停止并删除此Windows服务,该怎么做?我搜索了删除服务,但我不知道如何正确使用它。

至少如果没记错的话,序列接近于此:

  1. OpenSCManager
  2. 开放服务
  3. 控制服务(服务,SERVICE_CONTROL_STOP,...
  4. 删除服务
  5. 关闭服务手柄(服务)
  6. 关闭服务手柄(管理器)

请参阅 MSDN 上的删除服务示例。

前提是您定义了以下内容:

#define SERVICE_NAME            _T("myservice")             // Service name

SERVICE_STATUS          serviceStatus;

代码将是:

void WINAPI UninstallService(void) 
{
    SC_HANDLE hSCManager = NULL;
    SC_HANDLE hService = NULL;
    hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
    if (!hSCManager) 
    {
        wprintf(L"Open Service Manager failedn");
        return;
    }
    hService = OpenService(hSCManager, SERVICE_NAME, DELETE | SERVICE_STOP);
    if (hService == NULL) 
    {
        CloseServiceHandle(hSCManager);
        wprintf(L"Open service failedn");
        return;
    }

    // Deleting the service
    if (!DeleteService(hService)) 
    {
        CloseServiceHandle(hService);
        CloseServiceHandle(hSCManager);
        wprintf(L"Delete service failedn");
        return;
    }
    wprintf(L"Service deletedn");
    // Stopping the service  
    serviceStatus = { 0 };
    ControlService(hService, SERVICE_CONTROL_STOP,(LPSERVICE_STATUS)&serviceStatus);
    CloseServiceHandle(hService);
    CloseServiceHandle(hSCManager);
}