一个Windows安装程序中的32位和64位程序集

Gio*_*rgi 6 .net installer 64-bit windows-installer custom-action

我有一个用C#编写的应用程序,它依赖于sqlite托管提供程序.sqlite提供程序是依赖于平台的(有两个dll用于32位和64位具有相同名称的应用程序).应用程序在运行时基于OS加载所需的一个.

问题是,在创建安装程序时,我无法将64位模式dll添加到安装项目中,因为我收到以下错误:文件"'目标''与项目的目标平台不兼容''.

我会使用其他安装程序,但我有一个自定义操作,必须在安装过程中调用.

所以我想知道是否有一个安装程序可以让我添加32位和64位dll并执行用C#编写的自定义操作.

一个可能的解决方案是有两个安装程序,但我想尽可能避免它.

有什么建议?

RRU*_*RUZ 6

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;
Run Code Online (Sandbox Code Playgroud)