在InnoSetup配置文件的[Run]段中检查Windows版本

时间:2012-10-31 10:59:57

标签: windows-7 64-bit driver inno-setup

我必须在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,我该把它放在哪里?

1 个答案:

答案 0 :(得分: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位模式运行