中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-12 16:46
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 用批处理添加一个系统服务为什么需要重启才生效? 查看 1,176 回复 4
楼 主 用批处理添加一个系统服务为什么需要重启才生效? 发表于 2010-03-19 14:21 ·  中国 上海 电信
初级用户
积分 37
发帖 36
注册 2008-12-02 13:29
17年会员
UID 132662
性别 男
状态 离线
代码如下:
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”的系统服务,
但是写入后必须重启操作系统,服务方能在系统的服务列表里显示出来,
有没有办法写入后直接能启用这个服务的方法呢?请教各位了,谢谢。
2 发表于 2010-03-19 14:36 ·  中国 陕西 西安 电信
初级用户
积分 52
发帖 24
注册 2007-08-24 08:31
18年会员
UID 95728
性别 男
状态 离线
用 sc 来创建
3 发表于 2010-03-21 11:40 ·  中国 上海 奉贤区 电信
初级用户
积分 37
发帖 36
注册 2008-12-02 13:29
17年会员
UID 132662
性别 男
状态 离线
能否使用写入注册表的方式来启动一个服务?
我试过了,找不到注册表的变化。
4 发表于 2010-03-21 15:39 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
net start不行么?
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
5 发表于 2010-03-21 15:44 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
// 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 ]
论坛跳转: