Board logo

标题: 用批处理添加一个系统服务为什么需要重启才生效? [打印本页]

作者: cnds     时间: 2010-3-19 14:21    标题: 用批处理添加一个系统服务为什么需要重启才生效?

代码如下:
reg add "HKLM\SYSTEM\ControlSet001\Services\HZ_CommSrv" /f /v "Type" /t REG_DWORD /d 272
reg add "HKLM\SYSTEM\ControlSet001\Services\HZ_CommSrv" /f /v "Start" /t REG_DWORD /d 2
reg add "HKLM\SYSTEM\ControlSet001\Services\HZ_CommSrv" /f /v "ErrorControl" /t REG_DWORD /d 1
reg add "HKLM\SYSTEM\ControlSet001\Services\HZ_CommSrv" /f /v "ImagePath" /t REG_EXPAND_SZ /d "C:\WINDOWS\system32\HZ_CommSrv.exe"
reg add "HKLM\SYSTEM\ControlSet001\Services\HZ_CommSrv" /f /v "DisplayName" /t REG_SZ /d "HDZB Comm Service For V2.0"
reg add "HKLM\SYSTEM\ControlSet001\Services\HZ_CommSrv" /f /v "ObjectName" /t REG_SZ /d "LocalSystem"
上面这些代码,可以向系统写入一个名为“HZ_CommSrv”的系统服务,
但是写入后必须重启操作系统,服务方能在系统的服务列表里显示出来,
有没有办法写入后直接能启用这个服务的方法呢?请教各位了,谢谢。
作者: lslcxlsl     时间: 2010-3-19 14:36
用 sc 来创建
作者: cnds     时间: 2010-3-21 11:40
能否使用写入注册表的方式来启动一个服务?
我试过了,找不到注册表的变化。
作者: slore     时间: 2010-3-21 15:39
net start不行么?
作者: Hanyeguxing     时间: 2010-3-21 15:44
// delphi新建服务
function CreateServices(Const SvrName,FilePath:   String):   Boolean;   
var   
        a,b:SC_HANDLE;   
begin   
        Result:=False;   
            if FilePath   =''   then   Exit;   
   
        a   :=   OpenSCManager(nil,nil,SC_MANAGER_CREATE_SERVICE);   
   
        if   a   <=   0   then   Exit;   
        try   
              b   :=   CreateService(a,PChar(SvrName),   
               PChar(SvrName),   
               SERVICE_ALL_ACCESS,   
               SERVICE_INTERACTIVE_PROCESS   or   SERVICE_WIN32_OWN_PROCESS,   
               SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,   
               PChar(FilePath),nil,nil,nil,nil,nil);   
                  if   b   <=   0   then   begin   
                    ShowMessage(   SysErrorMessage(   GetlastError   ));   
                    Exit;   
              end;   
                  CloseServiceHandle(a);   
              CloseServiceHandle(b);   
               
              Result   :=   True;   
        except   
              CloseServiceHandle(a);   
              CloseServiceHandle(b);   
              Exit;   
        end;   
end;

[ Last edited by Hanyeguxing on 2010-3-21 at 17:14 ]