我是Inno设置的新手,
我在这里有一个问题
当我执行" getmac"从cmd行命令我得到了以下输出。我有多个mac地址(我在我的机器上安装了VM Virtual player)
当我卸载VM虚拟播放器并执行相同命令时,我得到了不同的输出,以下是屏幕截图。
我的问题是,
1.在为MAC验证创建 EXE 文件时,我需要在多个mac地址中考虑哪个mac地址。
2.在安装时 INNO设置将从本地计算机中获取 MAC地址,它将与我们在此处提供的mac地址进行比较使用mac地址创建EXE文件的时间。在这种情况下如果机器有多个mac地址,哪个mac地址将 Inno Setup 进行比较。
有没有人知道如何解决这个问题。**
提前致谢: - )
答案 0 :(得分:3)
我认为您没有技术问题;我认为您需要了解ao Inno设置的工作原理。安装人员需要知道,所选的MAC地址将用于验证产品,如果系统中不再存在该MAC地址,则选择错误的MAC地址将阻止产品运行。例如,在https://support.minitab.com/en-us/installation/frequently-asked-questions/license-fulfillment/which-mac-address-to-fufill-license/
中阅读第3点现在,请记住,MAC地址很容易被欺骗。您可以通过不允许某些MAC地址(例如,这些https://macaddress.io/faq/how-to-recognise-a-vmwares-virtual-machine-by-its-mac-address)并考虑IEEE标准协会在“扩展唯一标识符(EUI),组织唯一标识符(OUI)的使用指南”中所说的内容来进行某些控制。 ,以及公司ID(CID),可在此处访问:https://standards.ieee.org/content/dam/ieee-standards/standards/web/documents/tutorials/eui.pdf
这是您可以做的所有事情。如果您不排除任何MAC地址,那么在另一台计算机上运行安装将非常容易,因为这样一来,便可以复制有效的MAC地址。
答案 1 :(得分:2)
如果仅需要查找永久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地址,则可以将整个内容包装在一个批处理脚本中(由于它是一种混乱的脚本语言,因此IMO并不是最好的主意):
for /f "delims=" %%i in ('wmic nic where "PhysicalAdapter='True'" get MacAddress^,PNPDeviceID ^| findstr PCI') do (set res=%%i && echo %res:~0,17%)
请注意,逗号和竖线前的^
符号就像转义符一样,因此cmd不会将它们当作乱码。
还有一种使用Pascal脚本的Inno Setup方法。 这是我已修改的(原始here),仅列出了物理永久接口的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 +。
希望这些解决方案之一适合您。