多个网络适配器的Inno Setup mac id验证&单网络适配器

时间:2014-06-28 16:43:32

标签: inno-setup

我是Inno设置的新手,

我在这里有一个问题

当我执行" getmac"从cmd行命令我得到了以下输出。我有多个mac地址(我在我的机器上安装了VM Virtual player) Screen shot of command for mac address before uninstalling VM player

当我卸载VM虚拟播放器并执行相同命令时,我得到了不同的输出,以下是屏幕截图。

Screen shot of command for mac address after uninstalling VM player

我的问题是,

1.在为MAC验证创建 EXE 文件时,我需要在多个mac地址中考虑哪个mac地址。

2.在安装时 INNO设置从本地计算机中获取 MAC地址,它将与我们在此处提供的mac地址进行比较使用mac地址创建EXE文件的时间。在这种情况下如果机器有多个mac地址,哪个mac地址将 Inno Setup 进行比较。

  1. 在我的情况下,我使用我的mac地址使用Inno设置创建了EXE文件,在创建exe文件时我的机器有单个mac地址以后我安装了VM播放器然后我的机器有几个mac地址我尝试安装VM palyer后安装 Inno设置正在考虑新创建的MAC ADDRESS ,并说MAC地址无效**
  2. 有没有人知道如何解决这个问题。**

    提前致谢: - )

2 个答案:

答案 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 +。

希望这些解决方案之一适合您。