如果操作系统是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位安装。
答案 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。