Я рассматриваю использование InnoDependencyInstaller, и у него есть функция, которую он использует под капотом:
procedure Dependency_AddDotNet80;
begin
// https://dotnet.microsoft.com/download/dotnet/8.0
if not Dependency_IsNetCoreInstalled('-n Microsoft.NETCore.App -v 8.0.0') then begin
Dependency_Add('dotnet80' + Dependency_ArchSuffix + '.exe',
'/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart',
'.NET Runtime 8.0.0' + Dependency_ArchTitle,
Dependency_String('https://download.visualstudio.microsoft.com/download/pr/593685c9-7e98-455a-8e34-4b8ad1be9489/6ccf85c6fc244428d61f74ca3aee0645/dotnet-runtime-8.0.0-win-x86.exe', 'https://download.visualstudio.microsoft.com/download/pr/7f4d5cbc-4449-4ea5-9578-c467821f251f/b9b19f89d0642bf78f4b612c6a741637/dotnet-runtime-8.0.0-win-x64.exe'),
'', False, False);
end;
end;
Мой запрос связан с этим тестом:
if not Dependency_IsNetCoreInstalled('-n Microsoft.NETCore.App -v 8.0.0')
Я думаю, что последний установщик .NET8 лучше, чем 8.0.0
. Так будет ли этот тест провален? Я бы спросил на странице репозитория GitHub, но там невозможно создать проблему.
Сноска: Вот похожий вопрос по этой теме, где он относится к 8.0.3
:
Я подумал, что хотя бы попробую установить на свой ноутбук и вручную запустить консольное приложение.
Итак, в InitializeSetup
я вызываю Dependency_AddDotNet80;
и компилирую свое программное обеспечение. И я запускаю установщик на ноутбуке.
Он отображает следующее:
Таким образом, это указывает на то, что будет установлена среда выполнения .NET 8.0.0 (x86). Две проблемы:
8.0.0
.x86
.Мое приложение создано для AnyCPU
, но это 64-битный ноутбук. После установки пытаюсь запустить консольное приложение:
Он не может найти среду выполнения x64
. Углубившись в пример/репозиторий GitHub, я вижу, что есть переменная Dependency_ForceX86
и она используется в одном месте их кода:
function Dependency_IsX64: Boolean;
begin
Result := not Dependency_ForceX86 and Is64BitInstallMode;
end;
Кажется, я сейчас отвлекся! Возвращаясь к моему первоначальному запросу о Dependency_IsNetCoreInstalled
, я обнаружил, что он делает следующее:
function Dependency_IsNetCoreInstalled(const Version: String): Boolean;
var
ResultCode: Integer;
begin
// source code: https://github.com/dotnet/deployment-tools/tree/main/src/clickonce/native/projects/NetCoreCheck
if not FileExists(ExpandConstant('{tmp}{\}') + 'netcorecheck' + Dependency_ArchSuffix + '.exe') then begin
ExtractTemporaryFile('netcorecheck' + Dependency_ArchSuffix + '.exe');
end;
Result := ShellExec('', ExpandConstant('{tmp}{\}') + 'netcorecheck' + Dependency_ArchSuffix + '.exe', Version, '', SW_HIDE, ewWaitUntilTerminated, ResultCode) and (ResultCode = 0);
end;
Не знаете, поможет ли в этом вышеизложенное? Итак, у меня по сути есть 2 связанных запроса:
Как мы можем гарантировать, что проверяем (и загружаем) последнюю версию .NET8 с помощью этой системы? В идеале это должно быть указано в отзывах пользователей, например. 8.0.3
.
Как мы можем установить обе версии x86
(если требуется) и x64
среды выполнения .NET8?
Жаль, что этот замечательный инструмент GitHub не добавляет никаких записей в журнал установки. Единственное, что я понял, это то, что он загрузил netcorecheck.exe во временную папку для использования во время установки.
Я добавил комментарий к его статье, но он находится на модерации.
Я заметил, что в своей статье он говорит:
Зависимости устанавливаются на основе архитектуры системы. Если вы хотите установить 32-битные зависимости в 64-битной системе, вы можете принудительно установить 32-битный режим следующим образом:
Dependency_ForceX86 := True; // force 32-bit install of next dependencies
Dependency_AddVC2013;
Dependency_ForceX86 := False; // disable forced 32-bit install again
Но я провел тест на своей Windows 11 x64 с помощью этого кода:
begin
if Is64BitInstallMode then
MsgBox('Installing in 64-bit mode', mbInformation, MB_OK)
else
MsgBox('Installing in 32-bit mode', mbInformation, MB_OK);
begin
if IsWin64 then
MsgBox('Is Win 64', mbInformation, MB_OK)
else
MsgBox('Is Win 32', mbInformation, MB_OK);
end; end;
Мой установщик предназначен для обоих. Он включает в себя как 32-битные, так и 64-битные исполняемые файлы в одной папке. Я сделал это именно так.
Итак, этот бит в его коде возвращает, что это x86:
function Dependency_IsX64: Boolean;
begin
Result := not Dependency_ForceX86 and Is64BitInstallMode;
end;
@LexLi Вот так (codeproject.com/Questions/5380204/…). На данный момент находится в модерации.
@LexLi, ты имеешь в виду здесь: codeproject.com/Articles/20868/Inno-Setup-Dependency-Installer
Я создал запрос на извлечение для бита 8.0.3. github.com/DomGries/InnoDependencyInstaller/pull/92
В комментариях мне предложили задать этот вопрос на CodeProject. Так я и сделал:
Обнаружение .NET8 с помощью Inno Setup и Inno Dependency Installer
Это связано с тем, что на этой платформе рекламируется настоящий проект GitHub:
Установщик зависимостей Inno Setup
Ответ там был:
Поскольку здесь используется
netcorecheck
, это означает, что проверка версии является точной версией, поэтому передача8.0.0
внутрь проверяет, установлена ли эта версия, поэтому, если вам нужно8.0.3
, ее придется передать.
Поэтому я создал pull request для этой проблемы.
Что касается проблемы с невозможностью установки 64-разрядной версии .NET8… Я решил создать два отдельных установщика: один для 32-разрядной версии и один для 64-разрядной версии, каждый из которых находится в правильной папке с программными файлами.
Запрос на включение принят и объединен. 👍
Просмотры и репутация CodeProject могут помочь этому автору, поэтому вам следует попытаться оставить свой вопрос там, чтобы связаться с автором (и, вероятно, почему в этом репозитории нет раздела проблем).