Блоки на 32 и 64 бита в одном установщике Windows

Мне записали приложение в C#, который зависит от управляемого поставщика sqlite. sqlite поставщик является зависимым платформы (существует два dlls для приложений на 32 и 64 бита с тем же именем). Загрузки приложения желаемая во времени выполнения на основе ОС.

Проблема состоит в том, что при создании установщика я не могу добавить режим на 64 бита dll к проекту установки, поскольку я получаю следующую ошибку: Файл, '' предназначающийся '', не совместим с целевой платформой проекта ''.

Я использовал бы другой установщик, но у меня есть пользовательское действие, которое должно быть вызвано во время установки.

Таким образом, я хотел знать, существует ли установщик, который позволит мне добавить 32 и 64 бита dll к нему и выполнить пользовательское действие, записанное в C#.

Одно возможное решение состоит в том, чтобы иметь два установщика, но я хотел бы избежать его, если это возможно.

Какие-либо предложения?

6
задан Giorgi 28 April 2010 в 20:32
поделиться

3 ответа

Программа установки 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;
6
ответ дан 10 December 2019 в 02:44
поделиться

С установщиком Windows, № Вам понадобятся две настройки.

Однако NSIS вполне может обрабатывать обе платформы в одной настройке с обнаружением времени выполнения. Это действительно зависит от того, нацелены вы на корпоративных пользователей или нет, корпоративным клиентам потребуются пакеты установщика Windows (MSI), в то время как обычному интернет-пользователю все равно :)

1
ответ дан 10 December 2019 в 02:44
поделиться

Мне нравится идея установки Inno, я бы, наверное, попробовал, но учтите следующее:

Лучшая практика Microsoft MSI - иметь 2 отдельная установка, одна для 32 и одна для 64, и многие сторонние IDE, такие как Installshield, поддерживают эти передовые методы. ИМО, вероятно, для этого есть причины, иначе они бы добавили эту функцию, чтобы иметь преимущество перед конкурентами.

Чтобы создать 2 установки из одного проекта установки, у вас должны быть оба установщика, построенные из одного и того же проекта установки, используя флаги выпусков, вы в основном создаете одну функцию, содержащую ваши 32-битные сборки, другую, содержащую 64-битные, назначаете release для каждого из них и собирать каждый выпуск отдельно,

Итак, во время сборки вы собираете 32-битный выпуск, он упакован, в то время как 64-битный игнорируется, затем вы делаете то же самое для 64-битного. При необходимости вы можете передать эти флаги через аргументы командной строки.

Таким образом, вам не придется поддерживать повторяющийся установочный код.

1
ответ дан 10 December 2019 в 02:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: