gpt4 book ai didi

delphi - 在 Windows XP 和 Inno Setup 中迭代 SWbemObjectSet

转载 作者:行者123 更新时间:2023-12-01 23:08:43 25 4
gpt4 key购买 nike

我在 Windows XP 中从 Inno Setup 安装程序获取 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;

我的 ItemIndex 方法有问题。它仅出现在 Windows Vista 中。我怎样才能在 XP 上做到这一点?我真的不知道,因为我在互联网上找到的每个解决方案都不起作用。可能是因为在 Inno Setup 库中没有 IEnumVariant 这样的类型,并且我无法通过 SWbemObjectSetfor every obj in objset 语法进行迭代...

我还尝试使用 Item 方法获取 SWbemObject:

WbemObject := WbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(I));

但它返回错误

SWbemObjectSet: not found

有人可以帮我吗?这个问题有解决办法吗?

最佳答案

是的,您必须实现IEnumVariant。不确定 Pascal 脚本是否可以实现这一点。

<小时/>

使用 SWbemObjectSet.Item method是这样的:

WbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
WbemServices := WbemLocator.ConnectServer('localhost', 'root\cimv2');

WQLQuery := 'Select * from Win32_NetworkAdapterConfiguration';
WbemObjectSet := WbemServices.ExecQuery(WQLQuery);
if not VarIsNull(WbemObjectSet) then
begin
for I := 0 to WbemObjectSet.Count - 1 do
begin
WbemObject :=
WbemObjectSet.Item(Format('Win32_NetworkAdapterConfiguration=%d', [I]));
if WbemObject.IPEnabled then
begin
Log(WbemObject.MACAddress);
end;
end;
end;

但似乎这种方法在 Windows XP 上都不起作用。

<小时/>

一个可能的解决方法是执行

wmic nicconfig get MACAddress 

重定向到文件并读取它。

参见How to get an output of an Exec'ed program in Inno Setup?

关于delphi - 在 Windows XP 和 Inno Setup 中迭代 SWbemObjectSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43222471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com