如何用C语言来编写让系统中某个服务停止或重启?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用C语言来编写让系统中某个服务停止或重启?相关的知识,希望对你有一定的参考价值。
如何用C语言来编写让系统中某个服务停止或重启?
在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;
参考技术A 调用API函数OpenSCManager()和连接SCM(服务控制管理器)
调用API函数OpenService()打开服务,有2个参数,一个为服务名,一个为执行权限;返回服务句柄
启动服务StartService();第一个参数就是服务句柄
停止服务ControlService()和上面的一样
QueryServiceStatus()查询服务当前状态,这个函数填充一个SERVICE_STATUS类型结构,获取服务当前的一些信息
如何用 InnoSetup 来开始,停止服务
360为XP系统继续提供补丁和漏洞修复服务 自2001年至今,Windows XP操作系统已经连续工作了12年,是目前为止最长寿的操作系统。2014年4月8日,微软将正式停止对Windows XP的服务支持。同时,微软Office 2003也将于2014年4月8日停止服务。 对此,某互联网调研中心针对此事对用户产生的影响进行了专门调研。调研结果显示,80%的网友知道此事,但仍有六成用户表示XP 停止服务后会继续使用,其中不习惯新系统是多数用户坚持使用XP的主要原因。 倪光南:微软终止支持XP是重大安全事件 数据显示,全球范围内XP的市场份额约占25%,而我国XP市场份额更高达70%,个人用户安装和使用XP的计算机将近2亿台。如果XP被黑客发现严重漏洞又无法打补丁,广大网民和企事业单位电脑都将面临木马病毒感染、敏感信息泄露,甚至业务系统和生产系统无法正常运行的风险。 中国工程院院士倪光南日前接受采访时表示,对中国而言,XP停止服务是一个“重大的信息安全事件”。“在微软停止对XP支持后,推出有公信力的‘安全云服务’,接管我国2亿台XP电脑用户的服务支撑,这样,可防止继续使用XP的电脑出现严重安全事件。” 倪光南呼吁尽快推出国产操作系统替代XP,应对微软终止技术支持的严重影响。 360:继续保护XP 作为微软MAPP(主动防护)合作伙伴、国内最大安全厂商360对此事件表态,鉴于XP系统在中国市场仍占据主流地位,360安全卫士将继续为XP用户提供全方位的安全防护,并将针对XP新出现的高危漏洞提供防护措施。 据统计,此前360已19次为微软0day漏洞提供临时补丁防护措施,并14次全球率先报告漏洞而获得微软官方致谢,这两项数据在国内PC安全厂商中均大幅领先。这也给了360足够的底气宣布继续保护XP。 如果觉得我的服务还靠谱的话,别忘了送俺“满意答案”图标以示鼓励哦! 参考技术A 最佳答案的粘贴都是牛头对马嘴以上是关于如何用C语言来编写让系统中某个服务停止或重启?的主要内容,如果未能解决你的问题,请参考以下文章