我想檢查窗口服務是否正常工作。我爲此寫了代碼;它對本地系統工作正常,但是當我將它用於遠程系統時,它不起作用。是檢查窗口服務工作正常
代碼爲如下:
//Main Unit...
ServiceWatcher := TService.Create();
ShowMessage('Hello ServiceWatcher');
//This is for local system(Which is working fine)
if(ServiceWatcher.ServiceRunning('','CanveraPushOrder'))then
begin
ShowMessage('Sevice is running');
end
else begin
ShowMessage('Sevice is not working properly');
end;
if(ServiceWatcher.ServiceStopped('','CanveraPushOrder'))then
begin
ShowMessage('Sevice is stoped');
end;
//This is for remote system but its not working
if(ServiceWatcher.ServiceRunning('\\10.30.0.10','OCS inventory service'))then
begin
ShowMessage('Sevice is running');
end
else begin
ShowMessage('Sevice is not working properly');
end;
if(ServiceWatcher.ServiceStopped('\\10.30.0.10','OCS inventory service'))then
begin
ShowMessage('Sevice is stoped');
end;
//code for TService
unit ServiceStatus;
interface
uses WinSvc,Windows;
type
// The customer class definition
TService = class
private
public
constructor Create;
function ServiceGetStatus(sMachine,sService : string) : DWord;
function ServiceRunning(sMachine, sService : string) : boolean;
function ServiceStopped(sMachine, sService : string) : boolean;
end;
implementation
constructor TService.Create;
begin
end;
function TService.ServiceGetStatus(sMachine,sService : string) : DWord;
var
schm,schs : SC_Handle;
ss : TServiceStatus;
dwStat : DWord;
begin
//dwStat := -1;
schm := OpenSCManager(PChar(sMachine), Nil, SC_MANAGER_CONNECT);
if(schm > 0)then
begin
schs := OpenService(schm, PChar(sService), SERVICE_QUERY_STATUS);
if(schs > 0)then
begin
if(QueryServiceStatus(schs,ss))then
begin
dwStat := ss.dwCurrentState;
end;
CloseServiceHandle(schs);
end;
CloseServiceHandle(schm);
end;
Result := dwStat;
end;
function TService.ServiceRunning(sMachine, sService : string) : boolean;
begin
Result := SERVICE_RUNNING = ServiceGetStatus(sMachine, sService);
end;
function TService.ServiceStopped(sMachine, sService : string) : boolean;
begin
Result := SERVICE_STOPPED = ServiceGetStatus(sMachine, sService);
end;
end.
請檢查並告訴我在哪裏出了錯?
歡迎來到StackOverflow。將您的問題標爲「緊急」不會使您得到更好的答案或更快的答案。通過制定您的問題,您可以得到更好的答案,因爲它具有所需的所有信息(如:完整的代碼示例,明確闡述您期望從您的代碼中獲得什麼行爲,哪種服務,您用於本地和遠程系統的憑證類型等)。另請參閱常見問題解答:http://stackoverflow.com/faq – 2010-10-27 16:15:50
順便說一句:Windows已經有一個服務「監護人」選項。如果您在服務屬性對話框中選擇[恢復]選項卡,則會發現Windows在服務失敗時應執行的操作。正如我的回答,一項服務可能仍在運行,但尚未運行。 – 2010-10-28 10:16:22