如何在 C++ 中以编程方式删除 Windows 服务
how to programatically remove windows service in c++
我有一个服务的名称,我想停止并删除此Windows服务,该怎么做?我搜索了删除服务,但我不知道如何正确使用它。
至少如果没记错的话,序列接近于此:
- OpenSCManager
- 开放服务
- 控制服务(服务,SERVICE_CONTROL_STOP,...
- 删除服务
- 关闭服务手柄(服务)
- 关闭服务手柄(管理器)
请参阅 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);
}
相关文章:
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 从排序数组中删除重复项,具有不同代码方式的相同解决方案具有不同的输出
- 以编程方式防止重命名或删除文件,但仍使其可写
- 以递归方式从链表中删除节点
- 在 C++ 中使用删除函数的不同方式
- 如何以可移植方式删除名称为 wchar_t 类型的文件C++
- 对运算符删除覆盖的工作方式感到困惑
- C++多重继承 - 相同的方法名称 - 我可以以某种方式删除其中一个吗?
- 优雅的方式将/删除描述符到民意调查中
- 如何在 C++ 中以编程方式删除 Windows 服务
- 我应该采取什么方式使用 qt:all 类继承自 QObject 或删除 新后手动删除
- 为什么以这种方式删除 2D 数组会失败(C++)
- 以编程方式从 MFC 工具栏中完全删除按钮
- 在创建对象的函数之外删除另一个对象中的对象的位置/方式
- 以多态方式删除对象
- 如何以阻止的方式删除文件/文件夹
- 以编程方式删除文件的所有权限
- 尝试以任何方式删除所有编译器警告是最佳做法
- 以编程方式删除Windows中的COM端口(安装API?)
- c++ /(MFC dummy)和纯Win MessageBox() -如何删除消息队列或以其他方式删除现有的鼠标点击/