【发布时间】:2017-08-30 13:16:50
【问题描述】:
我在从 Inno Setup 安装程序获取 Windows XP 中的 MAC 地址列表时遇到问题。
我正在尝试编写一些代码(取自Get MAC address in Inno Setup):
function GetMacAddressesList(out List: Array of String): Integer;
var
I: Integer;
WQLQuery: string;
WbemLocator: Variant;
WbemServices: Variant;
WbemObject: Variant;
WbemObjectSet: Variant;
begin
Result := 0;
WbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
WbemServices := WbemLocator.ConnectServer('localhost', 'root\cimv2');
WQLQuery := 'Select * from Win32_NetworkAdapterConfiguration where IPEnabled=true';
WbemObjectSet := WbemServices.ExecQuery(WQLQuery);
if not VarIsNull(WbemObjectSet) and (WbemObjectSet.Count > 0) then
begin
Result := WbemObjectSet.Count;
SetArrayLength(List, WbemObjectSet.Count);
for I := 0 to WbemObjectSet.Count - 1 do
begin
WbemObject := WbemObjectSet.ItemIndex(I);
if not VarIsNull(WbemObject) then
begin
List[I] := WbemObject.MACAddress;
StringChange(List[i], ':', '');
StringChange(List[I], '-', '');
end;
end;
end;
end;
我对@987654323@ 方法有疑问。它仅出现在 Windows Vista 中。如何在 XP 上做到这一点?我真的不知道,因为我在互联网上找到的每个解决方案都不起作用。可能是因为在 Inno Setup 库中没有 IEnumVariant 这样的类型,而且我无法使用 for each obj in objset 语法通过 SWbemObjectSet 进行迭代......
我也尝试使用Item 方法获取SWbemObject:
WbemObject := WbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(I));
但它返回错误
SWbemObjectSet:未找到
有人可以帮我吗?这个问题有解决办法吗?
【问题讨论】:
标签: delphi windows-xp inno-setup pascalscript