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

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地址进行比较。在这种情况下,如果机器

我是Inno安装的新手

我有个问题

当我从cmd行执行“getmac”命令时,我得到了以下输出。我得到了多个mac地址(我已经在我的机器上安装了虚拟机虚拟播放器)

当我卸载vmvirtualplayer并执行相同命令时,我得到了不同的输出,下面是屏幕截图

我的问题是

<> p>在创建强> exe <强>文件时,需要在多个MAC地址中考虑哪个MAC地址。 2.在安装时,INNO Setup从本地计算机获取MAC地址,并将其与使用MAC地址创建EXE文件时提供的MAC地址进行比较。在这种情况下,如果机器有多个mac地址,Inno Setup将使用哪个mac地址进行比较

  • 在我的例子中,我使用Inno安装程序创建了带有mac地址的EXE文件,在创建EXE文件时,我的机器只有一个mac地址。后来我安装了VM player,然后我的机器有两个mac地址,我在安装VM palyer后尝试安装。Inno安装程序正在考虑新创建的mac地址,并且说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;