8

我必须在安装过程中安装驱动程序InnoSetup。为此,我有两个32 位/64 位的.msi安装文件。现在在Win7中,这个驱动已经包含了,所以我不需要再次安装它。到目前为止,我这样做了:

[Tasks]                
Name: "install_usb"; Description: "Install USB driver"; GroupDescription: "Drivers:";

[Files]
Source: "xy\driver\*"; DestDir: "{tmp}"

[Run]    
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\driver_32bit.msi"""; StatusMsg: "Installing 32bit USB driver"; Check: not IsWin64(); Tasks: install_usb; Flags: skipifsilent
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\driver_64bit.msi"""; StatusMsg: "Installing 64bit USB driver"; Check: IsWin64(); Tasks: install_usb; Flags: skipifsilent

因此,用户可以选择是否要安装驱动程序。如果他选择这样做,正确的驱动程序就会运行。这工作正常。现在,如果 >=Win7 正在运行,我想选择不安装驱动程序。我读过OnlyBelowVersion: 6.1但我似乎无法在该[Run]部分中执行以下操作:

[Run]    
... Check: IsWin64() and OnlyBelowVersion:6.1; ...

我如何OnlyBelowVersion在该部分中使用(或类似的东西)[Run]

另外,我想确保.msi以正确的模式运行(64 位系统的 64 位模式)。因为我认为,现在情况并非如此。有可能强制执行吗?我发现了ArchitecturesInstallIn64BitMode=x64,我必须把它放在哪里?

4

1 回答 1

10

OnlyBelowVersion不能在语句中使用的参数Check,而是作为单独的参数。

[Run]    
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\driver_32bit.msi"""; OnlyBelowVersion: 6.1; StatusMsg: "Installing 32bit USB driver"; Check: not IsWin64(); Tasks: install_usb; Flags: skipifsilent
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\driver_64bit.msi"""; OnlyBelowVersion: 6.1; StatusMsg: "Installing 64bit USB driver"; Check: IsWin64(); Tasks: install_usb; Flags: skipifsilent

对于您的第二个问题,该IsWin64函数在所有 64 位版本的 Windows 上都返回 True,所以这就是您正确的。从参考:

此函数将始终在 x64 版本的 Windows 上返回 True。

要在您正确提到的 64 位模式下运行 InnoSetup 安装,您至少需要指定ArchitecturesInstallIn64BitMode指令。如果您使用至少一个可用值指定此指令,则您的设置将在具有您指定的处理器架构的计算机上以 64 位模式运行,如果您在具有 x86 处理器的计算机上运行设置,则以 32 位模式运行.

于 2012-10-31T16:12:56.250 回答