展开全部
在Windows下,可以使用一系列API来完成该功能。
首先,调用OpenSCManager来获得服务管理器句柄。
然后,通过服务器管理器句柄,调用OpenService来打开指定服务名称的服务句柄。
通过服务句柄,调用ControlService来进行你想要的控制,比如暂停,停止,重启等操作。
最后,记得调用CloseServiceHandle来关闭上述句柄,以释放内核资源。
如下是我从以前的的一段代码中COPY过来的一点示例,该函数是准备删除一个服务,在删除服务之前,停止该服务。
BOOL Uninstall()
{
if ( !IsInstalled() )
return TRUE;
SC_HANDLE hSCM = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
if ( hSCM == NULL )
{
//MessageBox( NULL, _T( "打开服务管理器失败!" ), szServiceName, MB_OK );
return FALSE;
}
SC_HANDLE hService = OpenService( hSCM, szServiceName, SERVICE_STOP | DELETE );
if ( hService == NULL )
{
CloseServiceHandle( hSCM );
MessageBox( NULL, _T( "服务不存在!" ), szServiceName, MB_OK );
return FALSE;
}
SERVICE_STATUS status;
ControlService( hService, SERVICE_CONTROL_STOP, &status );
BOOL bDelete = DeleteService( hService );
CloseServiceHandle( hService );
CloseServiceHandle( hSCM );
if ( bDelete )
{
MessageBox( NULL, _T( "删除服务成功!" ), szServiceName, MB_OK );
return TRUE;
}
MessageBox( NULL, _T( "删除服务失败!" ), szServiceName, MB_OK );
//LogEvent(_T("Service could not be deleted"));
return FALSE;
}
首先,调用OpenSCManager来获得服务管理器句柄。
然后,通过服务器管理器句柄,调用OpenService来打开指定服务名称的服务句柄。
通过服务句柄,调用ControlService来进行你想要的控制,比如暂停,停止,重启等操作。
最后,记得调用CloseServiceHandle来关闭上述句柄,以释放内核资源。
如下是我从以前的的一段代码中COPY过来的一点示例,该函数是准备删除一个服务,在删除服务之前,停止该服务。
BOOL Uninstall()
{
if ( !IsInstalled() )
return TRUE;
SC_HANDLE hSCM = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
if ( hSCM == NULL )
{
//MessageBox( NULL, _T( "打开服务管理器失败!" ), szServiceName, MB_OK );
return FALSE;
}
SC_HANDLE hService = OpenService( hSCM, szServiceName, SERVICE_STOP | DELETE );
if ( hService == NULL )
{
CloseServiceHandle( hSCM );
MessageBox( NULL, _T( "服务不存在!" ), szServiceName, MB_OK );
return FALSE;
}
SERVICE_STATUS status;
ControlService( hService, SERVICE_CONTROL_STOP, &status );
BOOL bDelete = DeleteService( hService );
CloseServiceHandle( hService );
CloseServiceHandle( hSCM );
if ( bDelete )
{
MessageBox( NULL, _T( "删除服务成功!" ), szServiceName, MB_OK );
return TRUE;
}
MessageBox( NULL, _T( "删除服务失败!" ), szServiceName, MB_OK );
//LogEvent(_T("Service could not be deleted"));
return FALSE;
}
展开全部
调用API函数OpenSCManager()和连接SCM(服务控制管理器)
调用API函数OpenService()打开服务,有2个参数,一个为服务名,一个为执行权限;返回服务句柄
启动服务StartService();第一个参数就是服务句柄
停止服务ControlService()和上面的一样
QueryServiceStatus()查询服务当前状态,这个函数填充一个SERVICE_STATUS类型结构,获取服务当前的一些信息
调用API函数OpenService()打开服务,有2个参数,一个为服务名,一个为执行权限;返回服务句柄
启动服务StartService();第一个参数就是服务句柄
停止服务ControlService()和上面的一样
QueryServiceStatus()查询服务当前状态,这个函数填充一个SERVICE_STATUS类型结构,获取服务当前的一些信息
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询