在表单上放置一个TIdIcmpClient组件,并在此屏幕截图中设置其属性:
然后执行Ping:
IdIcmpClient1.Ping;
这会在运行时收到错误消息:
但是,如果我运行程序以管理员身份,则不会显示任何错误消息,并且会触发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完成的。