DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: webb123
今日帖子: 33
在线用户: 17
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 psstudio (天下) ★☆☆☆☆ -
普通会员
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 可用的啊?。。小弟初来乍到。。。 就是修改指定的服务程序的属性让它出错可以再重启。
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
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
作者:
男 psstudio (天下) ★☆☆☆☆ -
普通会员
2018/9/20 13:39:16
2楼: 小弟是初学者,还不明白什么叫缩进,我是在原文地址这里复制的代码。
https://blog.csdn.net/zuishikonghuan/article/details/47808805#zskh_def_2
感谢大哥的回答。我进去学习学习。~
----------------------------------------------
-
作者:
男 learndelphi (beside) ★☆☆☆☆ -
盒子活跃会员
2018/9/20 14:36:40
3楼: 查看服务状态,没有启动的话就启动是这样的吗?
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/9/20 15:44:47
4楼: 要不是,我自己可能会用到这种函数(可能性很低)。
我才懒得理你。
你这点代码,一点难度都没有。
所以,不会翻译的,要么是脑子太懒,要么就是脑子有病。

看你这垃圾态度,老子应该翻译完,自己留着,不发帖才对。

不懂“缩进” ,这是人能说出来的话吗?

这就是你说的 复制来的。
此帖子包含附件:
PNG 图像
大小:57.5K
----------------------------------------------
(C)(P)Flying Wang
作者:
男 wang_80919 (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
作者:
男 psstudio (天下) ★☆☆☆☆ -
普通会员
2018/9/21 7:56:13
6楼: - -!,嘿嘿。对比看了一下,现在知道什么叫缩进了。可能我复制了原文内容在其它地方又复制了一下导致的。大哥火气好旺啊。。@——@。。
----------------------------------------------
-
作者:
男 hujiacheng ( 旺财) ★☆☆☆☆ -
普通会员
2018/9/21 10:01:06
7楼: http://web.chacuo.net/formatcpp
结果
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);
}
----------------------------------------------
免费的FTPhttps://download-installer.cdn.mozilla.net/pub/firefox/releases/43.0/win64/zh-CN/https://cc.embarcadero.com/Author/575019>http://delphi-z.ruhttps://download-installer.cdn.mozilla.net/pub/firefox/releases/43.0/win64/zh-CN/https://cc.embarcadero.com/Author/575019>http://delphi.icm.edu.pl/ftp/https://download-installer.cdn.mozilla.net/pub/firefox/releases/43.0/win64/zh-CN/https://cc.embarcadero.com/Author/575019>http://delphi-z.ruhttps://download-installer.cdn.mozilla.net/pub/firefox/releases/43.0/win64/zh-CN/https://cc.embarcadero.com/Author/575019
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2018/9/21 19:16:05
8楼: 要这么麻烦做什么。。
直接用net start 服务名
不就完了么?
----------------------------------------------
--
作者:
男 psstudio (天下) ★☆☆☆☆ -
普通会员
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;
----------------------------------------------
泱泱华夏十亿兵,国耻期待儿孙平,愿提十万虎狼旅,跃马扬刀灭东京!
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/9/26 8:38:59
12楼: 但是 1 楼已经给出翻译答案了,何必再写一遍。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 psstudio (天下) ★☆☆☆☆ -
普通会员
2018/10/8 21:01:32
13楼: @ dorry
感谢兄弟,学习一下你的代码~
----------------------------------------------
-
作者:
男 pankangkang (aaaa) ★☆☆☆☆ -
普通会员
2018/10/18 9:40:18
14楼: 启动失败 就该找问题了吧  找找内存泄漏 找找BUG
自动恢复解决不了问题

看一看服务里的服务配置 基本上没看见有启动失败恢复 有做配置的
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/10/18 9:53:08
15楼: 因为你是个人计算机。
----------------------------------------------
(C)(P)Flying Wang
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行726.5625毫秒 RSS