如何同时重新分发包含32位DLL和64位DLL的软件?

时间:2015-06-03 06:52:01

标签: c++ windows dll

我正在开发 NPcap ,这是一个开源的Windows数据包捕获软件,源自着名的WinPcap,并增强了更多功能。

WinPcap的核心文件是 wpcap.dll,packet.dll(在System32和SysWOW64中)和名为npf.sys的驱动程序。与WinPcap略有不同,我们的NPcap将提供 npcap.dll,wpcap.dll,packet.dll和驱动程序npcap.sys 。 npcap.dll是我们的NPcap的“wpcap.dll”,npcap.sys是我们的NPcap的“npf.sys”。 wpcap.dll是我们添加的包装器,以保持与原始WinPcap兼容。

  1. 由于我们希望NPcap与WinPcap共存,因此我们决定将npcap.dll,wpcap.dll,packet.dll安装到软件安装路径“C:\ Program Files \ NPcap”而不是System32和SysWOW64路径。

  2. 我们不想更改wpcap.dll的文件名等等,因为我们希望WinPcap的用户软件在系统中没有WinPcap时可以自动使用NPcap的DLL 。当Windows按名称查找DLL时。

  3. NPcap希望在64位Windows中同时支持32位和64位用户软件(如Wireshark和Nmap)。所以32位Nmap可以使用它的32位wpcap.dll和64位Wireshark可以使用它的64位wpcap.dll。

  4. 这里我遇到了一个问题:我们的用户软件包括nmap和Wireshark,它们可以是32位或64位。 32位软件仅使用32位DLL,64位软件使用相同的软件。如果我们将NPcap的wpcap.dll放入我们的安装路径,如“C:\ Program Files \ NPcap”并将此字符串添加到PATH环境变量,我们无法添加32位wpcap.dll和64位wpcap .dll都在“C:\ Program Files \ NPcap”中,因为它们共享相同的名称。我们希望保留“wpcap.dll”名称,因为我们需要保持与原始WinPcap兼容。 因此我们无法将“wpcap.dll”复制到System32和SysWOW64,因为WinPcap的wpcap.dll已经存在还存在将32位DLL和64位DLL放在单独目录中的问题。如果我们将DLL放入“C:\ Program Files \ NPcap \ x86”和“C:\ Program Files \” NPcap \ x64“分开。我们仍然需要将这两个路径放入系统PATH环境变量中以供其他软件调用。并且会有这两个DLL路径的订单。后一个路径将被前者覆盖,因为Windows加载程序通过文件名搜索DLL。

    有没有办法不将DLL复制到System32和SysWOW64路径并解决32位和64位DLL同时解决问题?

0 个答案:

没有答案