如何解决以编程方式重新启动Windows Service
| 我知道这可以在C#/。Net中完成,但是我想知道是否可以通过调用Windows API来完成? 我有一个服务于DHCP请求的服务,当我想更新服务的配置时,我需要停止该服务,重写其INI文件,然后再次启动该服务。 任何帮助表示赞赏!解决方法
使用OpenSCManager打开服务控制管理器。
打开要使用OpenService控制的服务。
将ControlService或ControlServiceEx与SERVICE_CONTROL_STOP参数一起使用以停止服务。
做任何您需要做的。
使用StartService重新启动服务。
使用CloseServiceHandle关闭服务和SCM句柄。
,当然,有一堆C API函数,例如,请参见http://msdn.microsoft.com/zh-cn/library/ms682108%28v=vs.85%29.aspx。
,您是否正在寻找这样的东西:启动和停止服务?
,您需要打开服务控制管理器(OpenSCManager),然后打开服务本身(OpenService),最后要求它启动自身(StartService)。关闭您在使用过程中使用过的所有手柄,然后就完成了。
哇,用C ++处理服务真的让我回头...
祝好运,
,我参加聚会很晚,但是我建议正式详细的示例说明开始和停止服务的过程。与其他答案相比,优点是它们包括错误处理,边缘情况和相关服务-
停止:http://msdn.microsoft.com/zh-cn/library/windows/desktop/ms686335(v=vs.85).aspx
开始:http://msdn.microsoft.com/zh-cn/library/windows/desktop/ms686315(v=vs.85).aspx
,有时您想从服务本身重新启动服务。这个解决方案对我有用。为了清楚起见,我省略了相当琐碎的计时器代码。请注意,此解决方案仅由于调用者是服务并且在更高级别上运行而起作用。
void Watchdog::OnTimeout()
{
STARTUPINFO si = { };
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
PROCESS_INFORMATION pi = { };
// is modified by the call to CreateProcess (unicode version).
TCHAR szCmdLine[] = _T(\"cmd.exe /C \\\"net stop <yourservicenamehere> & net start <yourservicenamehere>\\\"\");
// send shell command to restart our service.
if (!CreateProcess(NULL,szCmdLine,NULL,FALSE,CREATE_NEW_CONSOLE,&si,&pi))
{
// do some error reporting...
LOG(\"*** ERROR *** Watchdog timeout. Restart attempt failed. Last error: 0x%x\\n\",GetLastError());
}
}
,在dos框中,net start [service]
将满足您的需求。如果找不到API解决方案,则始终可以使用start [service]
作为参数来启动net.exe
的过程。
,您也可以为此使用WMI。该链接上的示例代码是VB,但在Windows上几乎可以移植到任何一种语言都应该很容易。
如果您想在Windows上实现自动化,那么WMI很好学习,因为它为系统上大多数有趣的对象提供了与语言无关的面向对象的界面。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。