为什么找不到服务?急死我了,各位大侠,多多帮忙!!!!!!!!! (200分)

  • 主题发起人 主题发起人 一剑封喉
  • 开始时间 开始时间

一剑封喉

Unregistered / Unconfirmed
GUEST, unregistred user!
现在做了一个service 程序,然后其下面的客户端程序调用没有问题。
可是又做了一个manager程序想启动停止该服务,可是怎么找也找不到,不知道为什么?请各位大侠
帮忙 。。,此程序在以前做的一个SERVICE中也用过,在这里只不过拿过来换个服务名,可是
就是找不到。
程序如下:
var
SrvHandle: SC_HANDLE;//这些都在winsvc单元中定义的
Service_Status: _SERVICE_STATUS;//在winsvc单元中有定义
SrvStatus: Integer;
begin
//if flag then
// begin
//取 server的状态,如果 server正在运行则返回true ,否则返回 false
SrvHandle := OpenSCManager('', SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS);
SrvHandle := OpenService(SrvHandle, PChar('DEMOServer'), SERVICE_QUERY_STATUS or SERVICE_START);
if srvhandle=0 then
...begin
showmessage('无DEMO服务,请先安装!');
close;
end.......................

可是srvhandle怎么都是0,不知道该怎么办,明明服务里有个DEMOServer名,请多多关照!!!!!111
 
来自:delphi, 时间:2002-3-18 16:35:00, ID:990318
列出所有服务程序的代码,自己从列表中找一下。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, WinSvc;

type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
Button2: TButton;
procedure Button1Click(Sender: TObject);
private
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
HANDLE: SC_HANDLE;
buf: array [0..500] of TEnumServiceStatusA;
BytesNeeded, ServicesReturned, ResumeHandle: DWORD;
I: Integer;
begin
HANDLE := OpenSCManager(nil, nil, SC_MANAGER_ENUMERATE_SERVICE);
ResumeHandle := 0;
EnumServicesStatus(HANDLE, SERVICE_WIN32, SERVICE_ACTIVE or SERVICE_INACTIVE,
buf[0], sizeOf(Buf), BytesNeeded, ServicesReturned, ResumeHandle);
ListBox1.Items.Clear;
for I := 0 to ServicesReturned - 1 do
begin
listbox1.Items.add(StrPas(buf.lpDisplayName));
end;
CloseServiceHandle(HANDLE);
end;

end.

 
但是当我查找到该服务后,我还要得到它的状态,那就要取得它的句柄,可是还是没有办法取得,
请大侠们帮助呀
 
SrvHandle := OpenSCManager(nil , SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS);
if SrvHandle=0 then
RaiseLastWin32Error;
SrvHandle := OpenService(SrvHandle, PChar('DEMOServer'), SERVICE_QUERY_STATUS or SERVICE_START);
if SrvHandle=0 then
RaiseLastWin32Error;

先显示出错误信息看看是什么再说, 另外OpenSCManager机器名用nil更好
 
多人接受答案了。
 
后退
顶部