关于win2000服务的控制问题(50分)

Y

yujiax

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在程序中检测某一服务的已启动或未启动(比如mssqlserver),如果未启动则启动它.
(用net start能不能不弹出dos窗口,有没有其它的启动方法)
 
不弹出Dos窗口可以用ShellExecute(Handle, 'open', 'net', 'start xxx', nil, SW_HIDE);

另可用API控制服务: OpenSCManager等
 
to xianjun
API控制服务: OpenSCManager??有没有例子,有哪些参数或哪儿能找到参考?谢谢.
 
到处都有例子!
随便贴一个给你看看:
function StartService: Boolean;
var
Mgr, Svc: Integer;
UserName, ServiceStartName: string;
Config: Pointer;
Size: DWord;
begin
Result := False;
Mgr := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if Mgr <> 0 then
begin
Svc := OpenService(Mgr, PChar(SServiceName), SERVICE_ALL_ACCESS);
Result := Svc <> 0;
if Result then
begin
QueryServiceConfig(Svc, nil, 0, Size);
Config := AllocMem(Size);
try
QueryServiceConfig(Svc, Config, Size, Size);
ServiceStartName := PQueryServiceConfig(Config)^.lpServiceStartName;
if CompareText(ServiceStartName, 'LocalSystem') = 0 then
ServiceStartName := 'SYSTEM';
finally
Dispose(Config);
end;
CloseServiceHandle(Svc);
end;
CloseServiceHandle(Mgr);
end;
if Result then
begin
Size := 256;
SetLength(UserName, Size);
GetUserName(PChar(UserName), Size);
SetLength(UserName, StrLen(PChar(UserName)));
Result := CompareText(UserName, ServiceStartName) = 0;
end;
end;
 
接受答案了.
 
顶部