请帮忙看看这段代码 调用windouw 服务接口的代码 调用OpenService返回0是为什么
Type
SERVICE_STATUS = Record
dwServiceType: Cardinal;
dwCurrentState: Cardinal;
End;
HANDLE = Cardinal;
Const
SERVICE_ERROR_NORMAL = 1;
Const
//OpenSCManager函数操作权限
SC_MANAGER_ALL_ACCESS = $F003F; //所有权限
//OpenService函数操作权限
SERVICE_ALL_ACCESS = $F01FF; //所有权限
function ControlService(hService: HANDLE; dwControl: Cardinal; var ServiceStatus: SERVICE_STATUS): Boolean;
External 'ControlService@advapi32.dll stdcall';
function OpenService(hSCManager: HANDLE; lpServiceName: String; dwDesiredAccess: Cardinal): HANDLE;
External 'OpenServiceA@advapi32.dll stdcall';
function OpenSCManager(lpMachineName, lpDatabaseName: String; dwDesiredAccess: Cardinal): HANDLE;
External 'OpenSCManagerA@advapi32.dll stdcall';
function OpenServiceManager(): HANDLE;
begin
if UsingWinNT() then
begin
result := OpenSCManager('','',SC_MANAGER_ALL_ACCESS);
if result = 0 then
MsgBox('the servicemanager is not available', mbError, MB_OK)
end else begin
MsgBox('only nt based systems support services', mbError, MB_OK)
result := 0;
end;
end;
function IsServiceInstalled(ServiceName: string): Boolean;
var
hSCM : HANDLE;
hService: HANDLE;
begin
result := false;
hSCM := OpenServiceManager();
if hSCM <> 0 then
begin
hService := OpenService(hSCM,ServiceName,SERVICE_QUERY_CONFIG);
if hService <> 0 then
begin
result := true;
CloseServiceHandle(hService)
end;
CloseServiceHandle(hSCM)
end;
end;
我的操作系统是xp
调用OpenServiceManager可以返回句柄
查询的是MySQL服务肯定是存在的