Indy TIdIcmpClient.Ping没有以管理员身份运行程序?

时间:2015-02-28 14:21:38

标签: delphi ping indy delphi-xe7 icmp

在表单上放置一个TIdIcmpClient组件,并在此屏幕截图中设置其属性:

TIdIcmpClient properties

然后执行Ping:

IdIcmpClient1.Ping;

这会在运行时收到错误消息:

enter image description here

但是,如果我运行程序以管理员身份,则不会显示任何错误消息,并且会触发IdIcmpClient1Reply事件。

WHY吗

另外,当我在运行时创建组件时......:

function TForm1.MyPing(const AHost: string): Boolean;
var
  MyIdIcmpClient: TIdIcmpClient;
begin
  Result := False;

  MyIdIcmpClient := TIdIcmpClient.Create(Self);
  try
    MyIdIcmpClient.ReceiveTimeout := 2000;
    MyIdIcmpClient.Host := AHost;
    MyIdIcmpClient.PacketSize := 32;
    MyIdIcmpClient.Protocol := 1;
    MyIdIcmpClient.IPVersion := Id_IPv4;
    MyIdIcmpClient.OnReply := IdIcmpClient1Reply;

    try
      MyIdIcmpClient.Ping;
    except
      Result := False;
      EXIT;
    end;

    Result := MyIdIcmpClient.ReplyStatus.ReplyStatusType = rsEcho

  finally
    MyIdIcmpClient.Free;
  end;
end;

...

// Usage:

MyPing('microsoft.com');

...使用Ping引发套接字错误#10013,并且仅当运行作为管理员时,程序再次触发IdIcmpClient1Reply事件。

⇨那么如何在不必以管理员身份运行程序的情况下执行Ping?

这一切都是通过Delphi XE7完成的。

0 个答案:

没有答案