.NET Framework как предварительное условие для установки с помощью Inno-Setup

У меня есть приложение, которое я должен проверить, установлен ли .NET FW 3.5. Если он уже установлен, я хочу открыть окно сообщений, в котором пользователю предлагается загрузить его с веб-сайта Microsoft и остановить установку.

Я нашел следующий код. Подскажите пожалуйста:

а) Откуда мне вызывать эту функцию? б) Должен ли я проверить, установлена ​​ли уже .NET FW 3.5 или более поздняя версия? например Если установлена ​​FW 4.0 - это нужно для установки 3.5?

Спасибо

function IsDotNET35Detected(): Boolean;
var
  ErrorCode: Integer;
  netFrameWorkInstalled : Boolean;
  isInstalled: Cardinal;
begin
  result := true;

  // Check for the .Net 3.5 framework
  isInstalled := 0;
  netFrameworkInstalled := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5', 'Install', isInstalled);
  if ((netFrameworkInstalled)  and (isInstalled <> 1)) then netFrameworkInstalled := false;

  if netFrameworkInstalled = false then
  begin
    if (MsgBox(ExpandConstant('{cm:dotnetmissing}'), mbConfirmation, MB_YESNO) = idYes) then
    begin
      ShellExec('open',
      'http://www.microsoft.com/downloads/details.aspx?FamilyID=333325fd-ae52-4e35-b531-508d977d32a6&DisplayLang=en',
      '','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
    end;
    result := false;
  end;

end;

person Tamir Gefen    schedule 19.10.2012    source источник


Ответы (1)


Если вы хотите выполнить проверку при запуске установки, но до отображения формы мастера, используйте InitializeSetup для него обработчик событий. Когда вы вернете False этому обработчику, установка будет прервана, когда True, установка начнется. Вот опубликованный вами немного оптимизированный скрипт:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

[CustomMessages]
DotNetMissing=.NET Framework 3.5 is missing. Do you want to download it ? Setup will now exit!

[Code]
function IsDotNET35Detected: Boolean;
var
  ErrorCode: Integer;
  InstallValue: Cardinal;  
begin
  Result := True;
  if not RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5', 
    'Install', InstallValue) or (InstallValue <> 1) then
  begin
    Result := False;
    if MsgBox(ExpandConstant('{cm:DotNetMissing}'), mbConfirmation, MB_YESNO) = IDYES then
      ShellExec('', 'http://www.microsoft.com/downloads/details.aspx?FamilyID=333325fd-ae52-4e35-b531-508d977d32a6&DisplayLang=en',
        '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
  end;
end;

function InitializeSetup: Boolean;
begin
  Result := IsDotNET35Detected;
end;
person TLama    schedule 19.10.2012
comment
Я знаю, что не ответил ни на один из ваших вопросов. Я скоро вернусь с обновлением ... Но мне пора ... - person TLama; 19.10.2012
comment
Спасибо. Я попытаюсь. А как насчет более высоких (›3.5) версий? Верно ли, что если установлена ​​FW 4.0, она покрывает потребности 3.5? - person Tamir Gefen; 20.10.2012
comment
Это зависит от вашего приложения, как сказано в this article. Но никто четко не сказал, что если вы установите, например, .NET 4.5 на компьютере без установленного .NET Framework 3.5, вы сможете применить this kind обнаружения. - person TLama; 20.10.2012
comment
Как это звучит, пожалуйста? Думаю, проверю все три: 3.5, 4.0 и 4.5; Если ничего не установлено - останавливаю установку и прошу пользователя скачать v3.5; Если версия 3.5 не была установлена, но была установлена ​​4.0 или 4.5 - я позволяю пользователю решать, останавливать ли и загружать 3.5 или пытаться установить и запустить мое приложение в любом случае. - person Tamir Gefen; 20.10.2012
comment
Звучит здорово! Как подтвердил мой коллега (долгое время являвшийся разработчиком .NET), приложения, написанные на .NET 3.5, должны работать на новых платформах без проблем (за исключением нескольких различий в совместимости), но, как утверждает даже сама MS, для приложений, ориентированных на версии 1.1, 2.0. и 3.5, вы можете установить соответствующую версию .NET Framework на целевой машине для запуска приложения в наилучшей среде, поэтому я думаю, что это хороший способ спросить пользователя, хочет ли он загрузить и установить .NET 3.5, так как это рекомендованная часть для успешного запуска вашего приложения. - person TLama; 20.10.2012
comment
Если бы у меня была Ultimate-версия моей Windows 7, я бы попытался смоделировать все это в режиме XP (или на какой-нибудь другой виртуальной машине, если бы она была у меня). Обычная Windows XP без SP имела только предустановленную .NET Framework 2.0, если я правильно помню, поэтому установка, например, версия 4.5 покажет, что находится в реестре и что действительно установлено версией 4.5. Но у меня этого нет :-( - person TLama; 20.10.2012
comment
У меня есть результаты теста в режиме Windows XP. Я установил новую установку .NET Framework 4.0 системы Windows XP Mode (поскольку 4.5 не поддерживается в Windows XP), и ключ реестра для .NET 3.5 не присутствовал в системе после .NET 4.0. установка. - person TLama; 24.10.2012
comment
также в XP установщик Windows 3.1 должен быть установлен до .net framework 3.5, поскольку это является предварительным условием для него. - person Emad Elsaid; 11.09.2013