Performance 如何使用Delphi从远程计算机获取性能数据
如果我拥有相应的权限,如何从远程计算机获取性能数据(例如“每秒页数”、“平均磁盘队列”等) 基本上我想写一个这样的函数:Performance 如何使用Delphi从远程计算机获取性能数据,performance,delphi,winapi,Performance,Delphi,Winapi,如果我拥有相应的权限,如何从远程计算机获取性能数据(例如“每秒页数”、“平均磁盘队列”等) 基本上我想写一个这样的函数: function GetPerformanceData(aComputerName, aPerformanceIndicator: string): variant; 当然,在Windows和Linux上最好是开箱即用。我不太清楚“开箱即用”是什么意思-您不想对服务器进行任何修改吗?另外,由于您使用的是Delphi,我假设客户端是Windows—那么服务器呢 最简单的方法是
function GetPerformanceData(aComputerName, aPerformanceIndicator: string): variant;
当然,在Windows和Linux上最好是开箱即用。我不太清楚“开箱即用”是什么意思-您不想对服务器进行任何修改吗?另外,由于您使用的是Delphi,我假设客户端是Windows—那么服务器呢 最简单的方法是创建一个在服务器上收集这些信息的守护进程/服务,客户端上的函数可以连接并读取这些信息。服务器可以是在apache中运行的CGI shell脚本或定制的Delphi程序。还要注意,您通常可以通过SSH在远程unix机器上运行命令,因此您可以在远程服务器上运行类似vm_stat的东西,而无需编写任何内容。Windows具有与PsExec工具类似的功能,您可以在此处阅读:
我不太清楚您所说的“开箱即用”是什么意思-您不想对服务器进行任何修改吗?另外,由于您使用的是Delphi,我假设客户端是Windows—那么服务器呢 最简单的方法是创建一个在服务器上收集这些信息的守护进程/服务,客户端上的函数可以连接并读取这些信息。服务器可以是在apache中运行的CGI shell脚本或定制的Delphi程序。还要注意,您通常可以通过SSH在远程unix机器上运行命令,因此您可以在远程服务器上运行类似vm_stat的东西,而无需编写任何内容。Windows具有与PsExec工具类似的功能,您可以在此处阅读: 如果启用,您可以使用Delphi提供的免费: 允许访问和更新的MagWMI windows系统信息的使用 Windows管理工具。 MagWMI提供对的常规视图访问 任何使用类似SQL的WMI信息 命令,以及一些 与TCP/IP相关的专用功能 配置,例如设置 适配器IP地址和计算机 名称和域/工作组 如果启用,您可以使用Delphi提供的免费: 允许访问和更新的MagWMI windows系统信息的使用 Windows管理工具。 MagWMI提供对的常规视图访问 任何使用类似SQL的WMI信息 命令,以及一些 与TCP/IP相关的专用功能 配置,例如设置 适配器IP地址和计算机 名称和域/工作组 看一看 您可以重写
GetPerformanceData
函数以允许连接到远程注册表:
function GetPerformanceData(const RegValue: string; const ComputerName: string = ''): PPerfDataBlock;
const
BufSizeInc = 4096;
var
BufSize, RetVal: Cardinal;
Key: HKEY;
begin
BufSize := BufSizeInc;
Result := AllocMem(BufSize);
try
if ComputerName = '' then
Key := HKEY_PERFORMANCE_DATA
else if RegConnectRegistry(PChar(ComputerName), HKEY_PERFORMANCE_DATA, Key) <> ERROR_SUCCESS then
RaiseLastOSError;
RetVal := RegQueryValueEx(Key, PChar(RegValue), nil, nil, PByte(Result), @BufSize);
try
repeat
case RetVal of
ERROR_SUCCESS:
Break;
ERROR_MORE_DATA:
begin
Inc(BufSize, BufSizeInc);
ReallocMem(Result, BufSize);
RetVal := RegQueryValueEx(Key, PChar(RegValue), nil, nil, PByte(Result), @BufSize);
end;
else
RaiseLastOSError;
end;
until False;
finally
RegCloseKey(Key);
end;
except
FreeMem(Result);
raise;
end;
end;
您可以通过命令lodctr/s:
获取性能对象和计数器索引。
例如,“Pages/sec”计数器索引为40,属于性能对象“Memory”,索引为4。
另外,根据原始计数器数据的定义,了解如何解释原始计数器数据。了解原始计数器数据
您可以重写GetPerformanceData
函数以允许连接到远程注册表:
function GetPerformanceData(const RegValue: string; const ComputerName: string = ''): PPerfDataBlock;
const
BufSizeInc = 4096;
var
BufSize, RetVal: Cardinal;
Key: HKEY;
begin
BufSize := BufSizeInc;
Result := AllocMem(BufSize);
try
if ComputerName = '' then
Key := HKEY_PERFORMANCE_DATA
else if RegConnectRegistry(PChar(ComputerName), HKEY_PERFORMANCE_DATA, Key) <> ERROR_SUCCESS then
RaiseLastOSError;
RetVal := RegQueryValueEx(Key, PChar(RegValue), nil, nil, PByte(Result), @BufSize);
try
repeat
case RetVal of
ERROR_SUCCESS:
Break;
ERROR_MORE_DATA:
begin
Inc(BufSize, BufSizeInc);
ReallocMem(Result, BufSize);
RetVal := RegQueryValueEx(Key, PChar(RegValue), nil, nil, PByte(Result), @BufSize);
end;
else
RaiseLastOSError;
end;
until False;
finally
RegCloseKey(Key);
end;
except
FreeMem(Result);
raise;
end;
end;
您可以通过命令lodctr/s:
获取性能对象和计数器索引。
例如,“Pages/sec”计数器索引为40,属于性能对象“Memory”,索引为4。
另外,根据原始计数器数据的定义,了解如何解释原始计数器数据。+1特别是因为这是在Windows和Linux上“开箱即用”的唯一方法:远程机器应该提供数据,那么Delphi只是一个客户端。+1尤其是因为这是使其“开箱即用”的唯一方法在Windows和Linux上:远程机器应该提供数据,然后Delphi只是一个客户端。当然,你是对的。对不起,我忽略了Linux的要求。你当然是对的。对不起,我忽略了Linux的要求。