【问题标题】:.NET Framework as a pre-requisite for installation with Inno-Setup.NET Framework 作为安装 Inno-Setup 的先决条件
【发布时间】:2012-10-10 04:55:45
【问题描述】:

我有一个应用程序,我必须检查 .NET FW 3.5 是否已安装。如果已经安装,我想打开一个消息框,要求用户从 Microsoft 网站下载并停止安装。

我找到了以下代码。你能告诉我吗:

a) 我应该从哪里调用这个函数? b) 我应该检查是否已经安装了 .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;

【问题讨论】:

    标签: .net-4.0 .net-3.5 inno-setup


    【解决方案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;
    

    【讨论】:

    • 我知道我没有回答您的任何问题。我很快就会回来更新……但我现在得走了……
    • 谢谢。我会试试看。更高(> 3.5)的版本呢?如果安装了 FW 4.0,是否可以满足 3.5 的需求?
    • 这取决于您的应用程序,正如this article 中所说的那样。但是没有人清楚地说,如果你安装例如在未安装 .NET Framework 3.5 的计算机上安装 .NET 4.5,您将能够应用 this kind 的检测。
    • 请问听起来怎么样?我想我会检查所有三个:3.5、4.0 和 4.5;如果没有安装 - 我停止安装并要求用户下载 v3.5;如果未安装 3.5 但安装了 4.0 或 4.5 - 我让用户决定是停止并下载 3.5 还是尝试安装并启动我的应用程序
    • 如果我有 Windows 7 的 Ultimate 版本,我会尝试在 XP 模式下模拟所有这些(或其他一些虚拟机,如果我有的话)。如果我没记错的话,没有 SP 的普通 Windows XP 只预装了 .NET Framework 2.0,所以安装例如4.5 版将显示注册表中的内容以及 4.5 版实际安装的内容。但我没有这些:-(
    猜你喜欢
    • 2014-01-12
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多