У меня есть компонент, который требует .NET 4.0 для запуска, как мой установщик Inno Setup может проверить, что он установлен, а если нет, предложите пользователю его установить?Inno Setup: убедитесь, что установлен .NET 4.0
ответ
Функция InitializeSetup
вызывается при запуске исполняемого файла Inno Setup. Установка этого кода для пользовательского сценария должен делать то, что вы хотите:
function IsDotNetDetected(version: string; service: cardinal): boolean;
// Indicates whether the specified version and service pack of the .NET Framework is installed.
//
// version -- Specify one of these strings for the required .NET Framework version:
// 'v1.1' .NET Framework 1.1
// 'v2.0' .NET Framework 2.0
// 'v3.0' .NET Framework 3.0
// 'v3.5' .NET Framework 3.5
// 'v4\Client' .NET Framework 4.0 Client Profile
// 'v4\Full' .NET Framework 4.0 Full Installation
// 'v4.5' .NET Framework 4.5
// 'v4.5.1' .NET Framework 4.5.1
// 'v4.5.2' .NET Framework 4.5.2
// 'v4.6' .NET Framework 4.6
// 'v4.6.1' .NET Framework 4.6.1
// 'v4.6.2' .NET Framework 4.6.2
// 'v4.7' .NET Framework 4.7
//
// service -- Specify any non-negative integer for the required service pack level:
// 0 No service packs required
// 1, 2, etc. Service pack 1, 2, etc. required
var
key, versionKey: string;
install, release, serviceCount, versionRelease: cardinal;
success: boolean;
begin
versionKey := version;
versionRelease := 0;
// .NET 1.1 and 2.0 embed release number in version key
if version = 'v1.1' then begin
versionKey := 'v1.1.4322';
end else if version = 'v2.0' then begin
versionKey := 'v2.0.50727';
end
// .NET 4.5 and newer install as update to .NET 4.0 Full
else if Pos('v4.', version) = 1 then begin
versionKey := 'v4\Full';
case version of
'v4.5': versionRelease := 378389;
'v4.5.1': versionRelease := 378675; // 378758 on Windows 8 and older
'v4.5.2': versionRelease := 379893;
'v4.6': versionRelease := 393295; // 393297 on Windows 8.1 and older
'v4.6.1': versionRelease := 394254; // 394271 before Win10 November Update
'v4.6.2': versionRelease := 394802; // 394806 before Win10 Anniversary Update
'v4.7': versionRelease := 460798; // 460805 before Win10 Creators Update
end;
end;
// installation key group for all .NET versions
key := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\' + versionKey;
// .NET 3.0 uses value InstallSuccess in subkey Setup
if Pos('v3.0', version) = 1 then begin
success := RegQueryDWordValue(HKLM, key + '\Setup', 'InstallSuccess', install);
end else begin
success := RegQueryDWordValue(HKLM, key, 'Install', install);
end;
// .NET 4.0 and newer use value Servicing instead of SP
if Pos('v4', version) = 1 then begin
success := success and RegQueryDWordValue(HKLM, key, 'Servicing', serviceCount);
end else begin
success := success and RegQueryDWordValue(HKLM, key, 'SP', serviceCount);
end;
// .NET 4.5 and newer use additional value Release
if versionRelease > 0 then begin
success := success and RegQueryDWordValue(HKLM, key, 'Release', release);
success := success and (release >= versionRelease);
end;
result := success and (install = 1) and (serviceCount >= service);
end;
function InitializeSetup(): Boolean;
begin
if not IsDotNetDetected('v4.6', 0) then begin
MsgBox('MyApp requires Microsoft .NET Framework 4.6.'#13#13
'Please use Windows Update to install this version,'#13
'and then re-run the MyApp setup program.', mbInformation, MB_OK);
result := false;
end else
result := true;
end;
(Код взято отсюда: http://www.kynosarges.de/DotNetVersion.html)
Во-первых, он проверяет наличие записи реестра, который указывает версию. NET Framework, который установлен. Если запись реестра отсутствует, она запрашивает у пользователя загрузку платформы .NET. Если пользователь говорит «Да», он открывает URL-адрес загрузки. (Вы, возможно, придется изменить версию он указывает, в сценарии до версии 4.0.)
я наткнулся на this article on CodeProject, что может быть более всеобъемлющий и настраиваемый способ делать то, что вы ищете, хотя он может потребовать больше работы, чтобы понять, и его придется модифицировать для работы с версией 4.0.
@Cody Grey - Спасибо за ваше решение. Очень полезно!
В случае, если кто-либо заинтересован, здесь я беру на себя его функцию, используя значения перечисления вместо строк. Это изменение - это чисто личное предпочтение. Код включает изменения для v4.5 и, кажется, работает правильно, основываясь на моем ограниченном тестировании.
Дэвид
[Code]
//
// Enumeration used to specify a .NET framework version
//
type TDotNetFramework = (
DotNet_v11_4322, // .NET Framework 1.1
DotNet_v20_50727, // .NET Framework 2.0
DotNet_v30, // .NET Framework 3.0
DotNet_v35, // .NET Framework 3.5
DotNet_v4_Client, // .NET Framework 4.0 Client Profile
DotNet_v4_Full, // .NET Framework 4.0 Full Installation
DotNet_v45); // .NET Framework 4.5
//
// Checks whether the specified .NET Framework version and service pack
// is installed (See: http://www.kynosarges.de/DotNetVersion.html)
//
// Parameters:
// Version - Required .NET Framework version
// ServicePack - Required service pack level (0: None, 1: SP1, 2: SP2 etc.)
//
function IsDotNetInstalled(Version: TDotNetFramework; ServicePack: cardinal): boolean;
var
KeyName : string;
Check45 : boolean;
Success : boolean;
InstallFlag : cardinal;
ReleaseVer : cardinal;
ServiceCount : cardinal;
begin
// Registry path for the requested .NET Version
KeyName := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\';
case Version of
DotNet_v11_4322: KeyName := KeyName + 'v1.1.4322';
DotNet_v20_50727: KeyName := KeyName + 'v2.0.50727';
DotNet_v30: KeyName := KeyName + 'v3.0';
DotNet_v35: KeyName := KeyName + 'v3.5';
DotNet_v4_Client: KeyName := KeyName + 'v4\Client';
DotNet_v4_Full: KeyName := KeyName + 'v4\Full';
DotNet_v45: KeyName := KeyName + 'v4\Full';
end;
// .NET 3.0 uses "InstallSuccess" key in subkey Setup
if (Version = DotNet_v30) then
Success := RegQueryDWordValue(HKLM, KeyName + '\Setup', 'InstallSuccess', InstallFlag) else
Success := RegQueryDWordValue(HKLM, KeyName, 'Install', InstallFlag);
// .NET 4.0/4.5 uses "Servicing" key instead of "SP"
if (Version = DotNet_v4_Client) or
(Version = DotNet_v4_Full) or
(Version = DotNet_v45) then
Success := Success and RegQueryDWordValue(HKLM, KeyName, 'Servicing', ServiceCount) else
Success := Success and RegQueryDWordValue(HKLM, KeyName, 'SP', ServiceCount);
// .NET 4.5 is distinguished from .NET 4.0 by the Release key
if (Version = DotNet_v45) then
begin
Success := Success and RegQueryDWordValue(HKLM, KeyName, 'Release', ReleaseVer);
Success := Success and (ReleaseVer >= 378389);
end;
Result := Success and (InstallFlag = 1) and (ServiceCount >= ServicePack);
end;
это отлично выглядит, но не могли бы вы также показать, как использовать это из параметра проверки? – vidriduch
Просто добавьте это право после функции выше: 'function IsDotNetReallyInstalled(): Boolean; начало результат: = IsDotNetInstalled (DotNet_v45, 0); end; ' Затем вызовите это в своей функции 'check'. –
Извините меня ... Проверить параметр: Добавить 'not' ... not IsDotNetInstalled –
Если вы не заботитесь, если установлен "Full" или просто "Клиент" версия .NET 4:
try
ExpandConstant('{dotnet40}');
// Installed
except
// Not installed
end;
- 1. Inno Setup: Убедитесь, что путь {app} не содержит пробелов
- 2. Inno Setup: убедитесь, что пользователь прочитал страницу информации
- 3. Отмена установки в Inno Setup
- 4. Неизвестный идентификатор (Inno Setup)
- 5. Inno setup и DefaultDirName
- 6. Inno Setup: Как посмотреть вывод (перевод) препроцессора Inno Setup?
- 7. Inno Setup StringChangeEx Failure
- 8. Каталог Inno Setup существует
- 9. Inno Setup - Условные параметры
- 10. Модульная установка Inno Setup
- 11. Папка назначения Inno-Setup
- 12. Inno Setup: Пользовательские классы
- 13. GetComputerNameString Inno Setup
- 14. Inc Функция Inno Setup
- 15. Inno Setup Folders
- 16. Inno Setup - File Copy
- 17. Inno Setup DefaultDirName Issue
- 18. Inno Setup: Условные FLAGS
- 19. Ошибка синтаксиса Inno Setup
- 20. Inno Setup FileCopy failing
- 21. Установленные драйверы Inno Setup
- 22. Настраиваемая страница Inno Setup
- 23. Inno Setup проверяет, установлен ли WAMP перед продолжением
- 24. Inno Setup: событие OnHover
- 25. Inno setup installation
- 26. Inno Setup: функция deltree
- 27. Inno setup - Post Processing
- 28. Как Прервать Inno Setup
- 29. Недостаток Inno-Setup отсутствует
- 30. Inno Setup URLDownloadToCacheFile
Хорошо. Но мне нужно установить фреймворк 4.0 из локального (из моего установочного приложения) – Mediator
Вы должны иметь возможность легко модифицировать приведенный выше сценарий, чтобы сделать это. Вам нужно будет загрузить установщик .NET Framework 4.0 (либо профиль клиента, либо полный, в зависимости от вашего приложения), и включите его в установочный носитель вашего приложения. Затем из сценария вместо выхода в Интернет для извлечения установщика откройте существующий файл установки из исходного каталога установки. Или просто отобразите сообщение, которое просит пользователя сделать это («Сначала запустите приложение« NetFWSetup.exe »). –
«Сначала запустите приложение« NetFWSetup.exe »», а программный инсталлятор не похож на не делать? – Mediator