Inno Setup - 如何在32和64架构之间执行MSI

时间:2014-03-09 21:49:55

标签: inno-setup

我试图从第三方运行32位和64位的2 msi文件,我对32位Windows架构的msi有点麻烦。 程序似乎很好地提取了文件,但它没有执行安装程序。另一方面,对于64位Windows体系结构,安装程序可以正常工作。我不知道问题出在哪里。我的代码有什么问题我没看到了吗?谢谢!

[Setup]
...
ArchitecturesInstallIn64BitMode=x64

[Files]
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
Source: "filex64.msi"; DestName: "file.msi"; DestDir: "{app}"; Flags: deleteafterinstall; Check: Is64BitInstallMode
Source: "filex32.msi"; DestName: "file.msi"; DestDir: "{app}"; Flags: deleteafterinstall; Check: not Is64BitInstallMode;
Source: "manual.pdf"; DestDir: "{userdesktop}"; DestName: "Manual.pdf"

[Run]
Filename: "{sys}\msiexec.exe"; Parameters: "/package ""{app}\file.msi"" /qn /norestart /passive"; Flags: shellexec waituntilterminated; StatusMsg: "A instalar software {#MyAppVersion}"; 
Filename: "{userdesktop}\Manual.pdf"; Flags: postinstall;

2 个答案:

答案 0 :(得分:3)

我明白了。

标志

<强> 32位

在Filename和WorkingDir参数中使用时,导致{sys}常量映射到32位系统目录。这是32位模式安装中的默认行为。

此标志不能与shellexec标志组合使用。

<强> 64

在Filename和WorkingDir参数中使用时,导致{sys}常量映射到64位系统目录。这是64位模式安装中的默认行为。

此标志只能在安装程序在64位Windows上运行时使用,否则将发生错误。在支持32位和64位体系结构的安装上,可以通过添加Check:IsWin64参数来避免错误,这将导致在32位Windows上运行时以静默方式跳过该条目。

此标志不能与shellexec标志组合使用。

来源: http://www.jrsoftware.org/ishelp/index.php?topic=isxfunc_iswin64

基于此,我更改了我的脚本,以便正确查明两种架构的“msiexec.exe”文件。谢谢你们!

[Run]
Filename: "{sys}\msiexec.exe"; Parameters: "/package    ""{userdesktop}\Classic_Client_{#MyAppVersion}_64.msi"" /qn /norestart /passive"; Flags: 64bit skipifdoesntexist waituntilterminated; Check:IsWin64; StatusMsg: "A instalar Classic Client {#MyAppVersion} - 64bit"; 
Filename: "{sys}\msiexec.exe"; Parameters: "/package  ""{userdesktop}\Classic_Client_{#MyAppVersion}_32.msi"" /qn /norestart /passive"; Flags:   32bit skipifdoesntexist waituntilterminated; StatusMsg: "A instalar Classic Client   {#MyAppVersion} - 32bit"; 

答案 1 :(得分:1)

{sys}常量是问题。

  

{sys}系统的System32目录。例如:如果你使用过   条目和系统的Windows系统上的{sys} \ CTL3D32.DLL   目录是“C:\ WINDOWS \ SYSTEM”,安装程序或卸载将翻译它   到“C:\ WINDOWS \ SYSTEM \ CTL3D32.DLL”。

     

在64位Windows上,默认情况下,由此返回System32路径   只是常量映射到包含32位系统文件的目录   喜欢在32位Windows上。 (这可以通过启用64位来覆盖   模式。)