【问题标题】:32 and 64 bit assemblies in one windows installer一个 Windows 安装程序中的 32 位和 64 位程序集
【发布时间】:2010-04-28 20:32:59
【问题描述】:
【问题讨论】:
标签:
.net
installation
64-bit
windows-installer
custom-action
【解决方案1】:
Inno Setup 安装程序支持您要求的功能,此安装程序非常灵活和可靠,网络中存在许多脚本示例,可以根据最终客户端的架构进行有条件的安装。
检查此脚本位于C:\Program Files\Inno Setup 5\Examples\64BitThreeArch.iss
-- 64BitThreeArch.iss --
; Demonstrates how to install a program built for three different
; architectures (x86, x64, Itanium) using a single installer.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
Compression=lzma2
SolidCompression=yes
OutputDir=userdocs:Inno Setup Examples Output
; "ArchitecturesInstallIn64BitMode=x64 ia64" requests that the install
; be done in "64-bit mode" on x64 & Itanium, meaning it should use the
; native 64-bit Program Files directory and the 64-bit view of the
; registry. On all other architectures it will install in "32-bit mode".
ArchitecturesInstallIn64BitMode=x64 ia64
[Files]
; Install MyProg-x64.exe if running on x64, MyProg-IA64.exe if
; running on Itanium, MyProg.exe otherwise.
Source: "MyProg-x64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: IsX64
Source: "MyProg-IA64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: IsIA64
Source: "MyProg.exe"; DestDir: "{app}"; Check: IsOtherArch
Source: "MyProg.chm"; DestDir: "{app}"
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
[Code]
function IsX64: Boolean;
begin
Result := Is64BitInstallMode and (ProcessorArchitecture = paX64);
end;
function IsIA64: Boolean;
begin
Result := Is64BitInstallMode and (ProcessorArchitecture = paIA64);
end;
function IsOtherArch: Boolean;
begin
Result := not IsX64 and not IsIA64;
end;
【解决方案2】:
使用 Windows 安装程序,没有。您将需要两个设置。
但是NSIS 非常有能力通过运行时检测在单个设置中处理两个平台。这真的取决于您是否针对企业用户,企业客户将需要 Windows Installer (MSI) 软件包,而您的普通互联网用户并不关心 :)
【解决方案3】:
我喜欢 Inno 设置的想法,我可能会尝试一下,但请考虑以下几点:
Microsoft MSI 最佳实践是有 2 个单独的设置,一个用于 32,一个用于 64,许多 3rd 方 IDE(如 Installshield)都认可这些最佳实践。 IMO 这可能是有原因的,否则他们会添加此功能以比竞争对手更具优势。
要从单个安装项目构建 2 个安装程序,您将拥有从同一个安装项目构建的两个安装程序,使用发布标志,您基本上创建一个包含 32 位程序集的功能,另一个包含 64 位程序集的功能,分配一个发布标志给他们每个人,并分别构建每个版本,
因此,在构建时,您构建 32 位版本,将其打包,而 64 位被忽略,然后您对 64 位执行相同操作。如果需要,您可以通过命令行参数传递这些标志。
这样您就无需维护重复的设置代码。
【解决方案4】:
Windows Installer 在这种情况下可以正常工作,例如有两个组件,每个组件都有一个 sqlite 文件,并根据 VersionNT64 属性有条件地安装一个或另一个,该属性仅在安装在 64 位平台上运行时设置。