Inno setup 针对多个网络适配器的Inno Setup mac id验证&;单网络适配器
我是Inno安装的新手 我有个问题 当我从cmd行执行“getmac”命令时,我得到了以下输出。我得到了多个mac地址(我已经在我的机器上安装了虚拟机虚拟播放器) 当我卸载vmvirtualplayer并执行相同命令时,我得到了不同的输出,下面是屏幕截图 我的问题是 <> p>在创建强> exe <强>文件时,需要在多个MAC地址中考虑哪个MAC地址。 2.在安装时,INNO Setup将从本地计算机获取MAC地址,并将其与使用MAC地址创建EXE文件时提供的MAC地址进行比较。在这种情况下,如果机器有多个mac地址,Inno Setup将使用哪个mac地址进行比较Inno setup 针对多个网络适配器的Inno Setup mac id验证&;单网络适配器,inno-setup,Inno Setup,我是Inno安装的新手 我有个问题 当我从cmd行执行“getmac”命令时,我得到了以下输出。我得到了多个mac地址(我已经在我的机器上安装了虚拟机虚拟播放器) 当我卸载vmvirtualplayer并执行相同命令时,我得到了不同的输出,下面是屏幕截图 我的问题是 p>在创建强> exe 文件时,需要在多个MAC地址中考虑哪个MAC地址。 2.在安装时,INNO Setup将从本地计算机获取MAC地址,并将其与使用MAC地址创建EXE文件时提供的MAC地址进行比较。在这种情况下,如果机器
提前感谢:-)如果您只需要查找永久MAC地址,则应首先筛选物理NIC:
wmic nic where "PhysicalAdapter='True'"
一旦你有了这个列表,你会发现一些虚拟接口仍然显示为物理接口。
过滤它们的一个好方法是检查它们的设备路径,因为只有真正的网卡连接到PCI总线。
这也适用于USB总线,但由于这些卡不是永久连接的,所以您可以安全地忽略它们
使用MAC地址检索设备路径的一个好方法是
wmic nic where "PhysicalAdapter='True'" get MACAddress,PNPDeviceID
其输出类似于:
MACAddress PNPDeviceID
E0:94:67:XX:XX:XX PCI\VEN_8086&DEV_3165&SUBSYS_40108086&REV_81\E094XXXXXXXXXXXXXX
D8:CB:8A:XX:XX:XX PCI\VEN_1969&DEV_E0A1&SUBSYS_115A1462&REV_10\FFEFXXXXXXXXXXXXXX
E0:94:67:XX:XX:XX BTH\MS_BTHPAN\6&5XXXXXXXXXX
在上面的示例中,您可以看到两个“真实”以太网接口(wifi和eth)和一个蓝牙设备。
只需按关键字PCI进行筛选,就可以得到不可变的mac地址列表。
您可以通过inno setup turbo pascal函数或cmd进行过滤
最终结果可能如下所示:
wmic nic where "PhysicalAdapter='True'" get MACAddress,PNPDeviceID | findstr "PCI"
如果只想显示MAC地址,可以将整个内容包装在批处理脚本中(这不是最好的主意,因为它是一种混乱的脚本语言):
请注意逗号和管道前面的^
符号,其作用类似于转义字符,因此cmd不会将它们视为小字符
还有使用Pascal脚本的Inno设置方法。
这里有一个我修改过的(原版),只列出物理永久接口的MAC地址。
变量列表中的结果:
WbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
WbemServices := WbemLocator.ConnectServer('localhost', 'root\cimv2');
WQLQuery := 'Select MACAddress,PNPDeviceID from Win32_NetworkAdapter where PhysicalAdapter=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
if pos('PNP', WbemObject.PNPDeviceID) = 1 then
begin
List[I].MacAddress := WbemObject.MACAddress;
end;
end;
end;
end;
请注意,此pascal脚本仅适用于win7+
希望这些解决方案中有一个适合您。我认为您没有技术问题;我认为您需要了解ao Inno的设置工作原理。进行安装的人员需要知道,选择的MAC地址将用于验证产品,如果MAC地址不再在系统中,则选择错误的MAC地址将阻止产品运行。例如,阅读这里的第3点 现在,请记住,MAC地址很容易被欺骗。您可以通过不允许某些MAC地址来施加一些控制,例如这些地址,并考虑IEEE标准协会在此处提供的扩展唯一标识符(EUI)、组织唯一标识符(OUI)和公司ID(CID)使用指南中所述的内容:
这就是你所能做的。如果不排除任何MAC地址,那么在不同的机器上运行安装将非常容易,因为可以复制有效的MAC地址。在第3点中,您得到的确切消息是什么?
WbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
WbemServices := WbemLocator.ConnectServer('localhost', 'root\cimv2');
WQLQuery := 'Select MACAddress,PNPDeviceID from Win32_NetworkAdapter where PhysicalAdapter=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
if pos('PNP', WbemObject.PNPDeviceID) = 1 then
begin
List[I].MacAddress := WbemObject.MACAddress;
end;
end;
end;
end;