我试图从第三方运行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;
答案 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位来覆盖 模式。)