导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2018/9/20 10:39:17
标题:
delphi 控制服务程序代码,让服务启动失败后总是恢复!求助~
浏览:1692
加入我的收藏
楼主:
BOOL WINAPI LetServiceAlwaysReboot(LPCTSTR ServiceName){ SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT); if (hSCManager != NULL){ SC_HANDLE hService = OpenService(hSCManager, ServiceName, SC_MANAGER_ALL_ACCESS);//值得一提的是需要用SC_MANAGER_ALL_ACCESS if (hService != NULL){ SERVICE_FAILURE_ACTIONS failact = { 0 }; SC_ACTION act[3]; act[0].Delay = act[1].Delay = act[2].Delay = 0; act[0].Type = act[1].Type = act[2].Type = SC_ACTION_RESTART; failact.cActions = 3; failact.lpsaActions = act; failact.dwResetPeriod = 0; if (ChangeServiceConfig2(hService, SERVICE_CONFIG_FAILURE_ACTIONS, &failact)) { CloseServiceHandle(hService); CloseServiceHandle(hSCManager); return TRUE; } CloseServiceHandle(hService); CloseServiceHandle(hSCManager); return FALSE; } CloseServiceHandle(hSCManager); return FALSE; } else return FALSE; } 这段代码 有没有高手 可以转成DELPHI XE 可用的啊?。。小弟初来乍到。。。 就是修改指定的服务程序的属性让它出错可以再重启。
----------------------------------------------
-
作者:
2018/9/20 12:03:41
1楼:
没有缩进,垃圾代码。 代码垃圾你自己看就算了。发出来就是你不对了。 delphi 控制服务程序代码,让服务启动失败后总是恢复!求助~ http://www.2pascal.com/forum.php?mod=viewthread&tid=3016&fromuid=4 (出处: 2Pascal-新时代的Pascal) 答案写在这里了。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/9/20 13:39:16
2楼:
小弟是初学者,还不明白什么叫缩进,我是在原文地址这里复制的代码。 https://blog.csdn.net/zuishikonghuan/article/details/47808805#zskh_def_2 感谢大哥的回答。我进去学习学习。~
----------------------------------------------
-
作者:
2018/9/20 14:36:40
3楼:
查看服务状态,没有启动的话就启动是这样的吗?
----------------------------------------------
-
作者:
2018/9/20 15:44:47
4楼:
要不是,我自己可能会用到这种函数(可能性很低)。 我才懒得理你。 你这点代码,一点难度都没有。 所以,不会翻译的,要么是脑子太懒,要么就是脑子有病。 看你这垃圾态度,老子应该翻译完,自己留着,不发帖才对。 不懂“缩进” ,这是人能说出来的话吗? 这就是你说的 复制来的。
此帖子包含附件: 大小: 57.5K
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/9/20 15:49:13
5楼:
为啥老子复制一下,就带了缩进? BOOL WINAPI LetServiceAlwaysReboot(LPCTSTR ServiceName){ SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT); if (hSCManager != NULL){ SC_HANDLE hService = OpenService(hSCManager, ServiceName, SC_MANAGER_ALL_ACCESS);//值得一提的是需要用SC_MANAGER_ALL_ACCESS if (hService != NULL){ SERVICE_FAILURE_ACTIONS failact = { 0 }; SC_ACTION act[3]; act[0].Delay = act[1].Delay = act[2].Delay = 0; act[0].Type = act[1].Type = act[2].Type = SC_ACTION_RESTART; failact.cActions = 3; failact.lpsaActions = act; failact.dwResetPeriod = 0; if (ChangeServiceConfig2(hService, SERVICE_CONFIG_FAILURE_ACTIONS, &failact)) { CloseServiceHandle(hService); CloseServiceHandle(hSCManager); return TRUE; } CloseServiceHandle(hService); CloseServiceHandle(hSCManager); return FALSE; } CloseServiceHandle(hSCManager); return FALSE; } else return FALSE; }
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/9/21 7:56:13
6楼:
- -!,嘿嘿。对比看了一下,现在知道什么叫缩进了。可能我复制了原文内容在其它地方又复制了一下导致的。大哥火气好旺啊。。@——@。。
----------------------------------------------
-
作者:
2018/9/21 19:16:05
8楼:
要这么麻烦做什么。。 直接用net start 服务名 不就完了么?
----------------------------------------------
--
作者:
2018/9/21 21:54:49
9楼:
楼上的兄弟,看清楚了。这个不是重启服务那么简单。
----------------------------------------------
-
作者:
dorry (littlecat)
★☆☆☆☆
-
盒子活跃会员
2018/9/25 7:45:54
10楼:
@ psstudio 兄弟不急不躁,佩服!
----------------------------------------------
泱泱华夏十亿兵,国耻期待儿孙平,愿提十万虎狼旅,跃马扬刀灭东京!
作者:
dorry (littlecat)
★☆☆☆☆
-
盒子活跃会员
2018/9/25 22:37:06
11楼:
@ psstudio 以下代码测试成功! win10 64位,delphi 10.2 function LetServiceAlwaysReboot(ServiceName: string): Boolean ; var hSCManager, hService: THandle; failact: SERVICE_FAILURE_ACTIONS; act:array[0..2] of SC_ACTION ; begin Result := False; hSCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS); try if hSCManager <> 0 then begin hService := OpenService(hSCManager, PChar(ServiceName), SERVICE_ALL_ACCESS); try if hService <> 0 then begin // failact:=0; act[0].Delay:=0; act[1].Delay:=0;act[2].Delay:=0; act[0].&Type:=SC_ACTION_RESTART; act[1].&Type:=SC_ACTION_RESTART; act[2].&Type:=SC_ACTION_RESTART; failact.dwResetPeriod := 0; failact.lpCommand := Nil; failact.lpRebootMsg := Nil; failact.cActions := 3; failact.lpsaActions := @act; failact.dwResetPeriod := 0; if (ChangeServiceConfig2(hService, SERVICE_CONFIG_FAILURE_ACTIONS, @failact)) then begin Result := True; end; end; finally CloseServiceHandle(hService); end; end; finally CloseServiceHandle(hSCManager); end; end;
----------------------------------------------
泱泱华夏十亿兵,国耻期待儿孙平,愿提十万虎狼旅,跃马扬刀灭东京!
作者:
2018/9/26 8:38:59
12楼:
但是 1 楼已经给出翻译答案了,何必再写一遍。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/10/8 21:01:32
13楼:
@ dorry 感谢兄弟,学习一下你的代码~
----------------------------------------------
-
作者:
2018/10/18 9:40:18
14楼:
启动失败 就该找问题了吧 找找内存泄漏 找找BUG 自动恢复解决不了问题 看一看服务里的服务配置 基本上没看见有启动失败恢复 有做配置的
----------------------------------------------
-
作者:
2018/10/18 9:53:08
15楼:
因为你是个人计算机。
----------------------------------------------
(C)(P)Flying Wang