如何用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语言来编写让系统中某个服务停止或重启?的主要内容,如果未能解决你的问题,请参考以下文章

如何用C语言播放一段音频呢

怎样用JAVAscript编写数字金字塔

如何用高级语言对操作系统进行编码?

C语言中如何用gets();语句来接收一个二维数组

如何用Java语言编写学生成绩管理系统

linux下 如何用NDK生成C语言动态库