Y
yangmingnian
Unregistered / Unconfirmed
GUEST, unregistred user!
大家来讨论讨论!一个Win2K下控制服务的问题!
我研究了一下午,终于有了点成果,和大家一起分享,并希望大家一起讨论。
程序代码如下:
uses WinSvc;
……
procedure TForm1.Button1Click(Sender: TObject);
var
temp:SC_HANDLE;
pChar;
errWORD;
ss:SERVICE_STATUS;
begin
p:=nil;
temp:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
temp:=OpenService(temp,'MSSQLSERVER',SERVICE_ALL_ACCESS); // 在这里指出服务名
if StartService(temp,Cardinal(0),p) then // 启动服务,这里的p不能直接写成nil
showmessage('succeed!')
else begin
err:=getlasterror();
case err of
……
ERROR_INVALID_HANDLE:showmessage('ERROR_INVALID_HANDLE');
end;
end;
// ControlService(temp,SERVICE_CONTROL_STOP,ss); // 停止服务
end;
注意:OpenService函数的第二个参数指出了服务名称,例如:Telnet服务的名称为:TlntSvr
一部分服务名称可由“控制面板->管理工具->服务(点选具体服务)->属性->常规->服务名称(区别于显示名称)”中查出来。
我现在有两个问题:
1. 上述方法得不到http、ftp等服务的名称,不知道它们的名称如何获得。
2. 如果只知道服务的端口,如何确定其服务名称。
我试过查看winnt/system32/drivers/etc/services文件,但是它提供的服务名称在这里不适应。
好像它提供的服务名称只能用于TClientSocket和TServerSocket等类的service属性。
例如telnet服务,该文件中提供的服务名称就是telnet,对应端口/协议为23/tcp
而实际上这里要用到的Telnet服务的名称为:TlntSvr。
我研究了一下午,终于有了点成果,和大家一起分享,并希望大家一起讨论。
程序代码如下:
uses WinSvc;
……
procedure TForm1.Button1Click(Sender: TObject);
var
temp:SC_HANDLE;
pChar;
errWORD;
ss:SERVICE_STATUS;
begin
p:=nil;
temp:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
temp:=OpenService(temp,'MSSQLSERVER',SERVICE_ALL_ACCESS); // 在这里指出服务名
if StartService(temp,Cardinal(0),p) then // 启动服务,这里的p不能直接写成nil
showmessage('succeed!')
else begin
err:=getlasterror();
case err of
……
ERROR_INVALID_HANDLE:showmessage('ERROR_INVALID_HANDLE');
end;
end;
// ControlService(temp,SERVICE_CONTROL_STOP,ss); // 停止服务
end;
注意:OpenService函数的第二个参数指出了服务名称,例如:Telnet服务的名称为:TlntSvr
一部分服务名称可由“控制面板->管理工具->服务(点选具体服务)->属性->常规->服务名称(区别于显示名称)”中查出来。
我现在有两个问题:
1. 上述方法得不到http、ftp等服务的名称,不知道它们的名称如何获得。
2. 如果只知道服务的端口,如何确定其服务名称。
我试过查看winnt/system32/drivers/etc/services文件,但是它提供的服务名称在这里不适应。
好像它提供的服务名称只能用于TClientSocket和TServerSocket等类的service属性。
例如telnet服务,该文件中提供的服务名称就是telnet,对应端口/协议为23/tcp
而实际上这里要用到的Telnet服务的名称为:TlntSvr。