【问题标题】:check for Windows version in [Run] segment of InnoSetup config file在 InnoSetup 配置文件的 [Run] 段中检查 Windows 版本
【发布时间】:2012-10-31 10:59:56
【问题描述】:

我必须在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; ...

如何在[Run] 部分使用OnlyBelowVersion(或类似名称)?

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

【问题讨论】:

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


    【解决方案1】:

    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 位模式运行.

    【讨论】:

    • 酷,完美运行。对于第二个问题:虽然是的,这在 x64 版本中返回 true,但它是否也保证可执行文件和安装程序在 64 位模式下运行?
    • 哦,我以为您只希望 driver_64bit.msi 安装程序在 64 位系统上运行,而不是 InnoSetup 安装程序本身。那我来更新答案...
    • 好吧,驱动程序是重要的部分。但如果在这种情况下也包含安装程序本身并不困难,那是一件好事。
    • 我已经更新了我的答案,即使在这种情况下你是对的。如果要在 64 位处理器架构上以 64 位模式运行 InnoSetup 安装程序,请在 ArchitecturesInstallIn64BitMode 指令中指定处理器架构。在 x86 架构上,设置将以 32 位模式运行。
    • 如果您的实际应用程序是 64 位,您应该只使用ArchitecturesInstallIn64BitMode。如果只有一个组件(例如驱动程序)是 64 位的,那么您应该对特定条目使用 64 位路径/注册表常量和/或 64bit 标志。
    猜你喜欢
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多