OpenServiceManager这个函数调用一直都是MsgBox('the servicemanager is not available', mbError, MB_OK),不知道怎么回事?另外,求一段终止进程的函数,给一个名字,比如iexplorer,终止运行的所有进程。谢谢。type
SERVICE_STATUS = record
     dwServiceType : cardinal;
     dwCurrentState : cardinal;
     dwControlsAccepted : cardinal;
     dwWin32ExitCode : cardinal;
     dwServiceSpecificExitCode : cardinal;
     dwCheckPoint : cardinal;
     dwWaitHint : cardinal;
end;
HANDLE = cardinal;

const
SERVICE_QUERY_CONFIG = $1;
SERVICE_CHANGE_CONFIG = $2;
SERVICE_QUERY_STATUS = $4;
SERVICE_START = $10;
SERVICE_STOP = $20;
SERVICE_ALL_ACCESS = $f01ff;
SC_MANAGER_ALL_ACCESS = $f003f;
SERVICE_WIN32_OWN_PROCESS = $10;
SERVICE_WIN32_SHARE_PROCESS = $20;
SERVICE_WIN32 = $30;
SERVICE_INTERACTIVE_PROCESS = $100;
SERVICE_BOOT_START          = $0;
SERVICE_SYSTEM_START        = $1;
SERVICE_AUTO_START          = $2;
SERVICE_DEMAND_START        = $3;
SERVICE_DISABLED            = $4;
SERVICE_DELETE              = $10000;
SERVICE_CONTROL_STOP = $1;
SERVICE_CONTROL_PAUSE = $2;
SERVICE_CONTROL_CONTINUE = $3;
SERVICE_CONTROL_INTERROGATE = $4;
SERVICE_STOPPED = $1;
SERVICE_START_PENDING       = $2;
SERVICE_STOP_PENDING        = $3;
SERVICE_RUNNING             = $4;
SERVICE_CONTINUE_PENDING    = $5;
SERVICE_PAUSE_PENDING       = $6;
SERVICE_PAUSED              = $7;function ControlService(hService :HANDLE; dwControl :cardinal;var ServiceStatus :SERVICE_STATUS) : boolean;
external '[email protected] stdcall'; function CloseServiceHandle(hSCObject :HANDLE): boolean;
external '[email protected] stdcall';function OpenService(hSCManager :HANDLE;lpServiceName: string; dwDesiredAccess :cardinal): HANDLE;
external '[email protected] stdcall';function OpenSCManager(lpMachineName, lpDatabaseName: string; dwDesiredAccess :cardinal): HANDLE;
external '[email protected] stdcall';function QueryServiceStatus(hService :HANDLE;var ServiceStatus :SERVICE_STATUS) : boolean;
external '[email protected] stdcall';function CheckPorts(): Integer;
external 'CheckPorts@files:ISC.DLL stdcall';function OpenServiceManager() : HANDLE;
begin
if UsingWinNT() = true then begin
Result := OpenSCManager('','ServicesActive',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;