Inno设置32位和64位DLL安装

时间:2013-07-30 10:28:12

标签: inno-setup 32bit-64bit

如果操作系统是64位,我想在Program Files (x86)文件夹和64位DLL到Program Files文件夹中安装32位DLL,并分别注册它们。如果是32位操作系统,我只想将文件复制到普通程序文件夹并注册。

如何在Inno Setup中执行此操作? 64位DLL也将由64位regsvr32程序注册吗?

到目前为止,这是我的代码。它在32位操作系统上运行良好,但在64位操作系统上,它会转储Program Files (x86)中的两组文件。

[Files]
Source: D:\..\32bit files\mylibrary.dll; DestDir: {app}; \
    Flags: restartreplace ignoreversion regserver 32bit

Source: D:\..\64bit files\mylibrary.dll; DestDir: {app}; \
    Flags: restartreplace ignoreversion regserver 64bit; Check: IsWin64

我查看了64BitTwoArch.iss示例,但它说明了如何进行32位或64位安装,而不是32位和64位安装。

2 个答案:

答案 0 :(得分:4)

我在以下方面取得了成功:

[Files]
Source: D:\..\32bit files\mylibrary.dll; DestDir: {app}; \
    Flags: restartreplace ignoreversion regserver 32bit; **Check: "not IsWin64"**

Source: D:\..\64bit files\mylibrary.dll; DestDir: {app}; \
    Flags: restartreplace ignoreversion regserver 64bit; Check: IsWin64

答案 1 :(得分:2)

无法让它仅与{app}变量一起使用,因为您要同时在两个目的地上安装。

通过硬编码程序文件文件夹来解决这个问题

#define MyAppName "TestAPP"

[Files]
Source: D:\..\32bit files\mylibrary.dll; DestDir: {pf32}\{#MyAppName}; \
    Flags: restartreplace ignoreversion regserver 32bit

Source: D:\..\64bit files\mylibrary.dll; DestDir: {pf64}\{#MyAppName}; \
    Flags: restartreplace ignoreversion regserver 64bit; Check: IsWin64

这对我有用。 Windows通过这种方式为32位应用程序加载32位dll,为64位应用程序加载64位dll。