.net 4.0 .NET Framework作为安装Inno Setup的先决条件

.net 4.0 .NET Framework作为安装Inno Setup的先决条件,.net-4.0,.net-3.5,inno-setup,.net 4.0,.net 3.5,Inno Setup,我有一个应用程序,我必须检查.NETFW3.5是否已经安装。如果已经安装,我想打开一个messagebox,要求用户从Microsoft网站下载并停止安装 我找到了下面的代码。请告诉我: a) 我应该从哪里调用此函数? b) 我是否应该检查是否已安装.NET FW 3.5或更高版本?e、 g.如果安装了FW 4.0,是否有必要安装3.5 多谢各位 function IsDotNET35Detected(): Boolean; var ErrorCode: Integer; netFram

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

我找到了下面的代码。请告诉我:

a) 我应该从哪里调用此函数? b) 我是否应该检查是否已安装.NET FW 3.5或更高版本?e、 g.如果安装了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;
函数IsDotNET35Detected():布尔值;
变量
错误代码:整数;
netFrameWorkInstalled:布尔值;
已安装:红衣主教;
开始
结果:=真;
//检查.NET3.5框架
isInstalled:=0;
netFrameworkInstalled:=regQueryWordValue(HKLM,“软件\Microsoft\NET Framework安装程序\NDP\v3.5”,“安装”,已安装);
如果((netFrameworkInstalled)和(isInstalled 1)),则netFrameworkInstalled:=false;
如果netFrameworkInstalled=false,则
开始
如果(MsgBox(ExpandConstant('{cm:dotnetmissing}')、mbConfirmation、MB_YESNO)=idies),那么
开始
ShellExec('打开',
'http://www.microsoft.com/downloads/details.aspx?FamilyID=333325fd-ae52-4e35-b531-508d977d32a6&DisplayLang=en',
'',开关显示正常,ewNoWait,错误代码);
结束;
结果:=假;
结束;
结束;

如果要在安装开始时但在显示向导窗体之前执行检查,请使用事件处理程序。当您将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;
[设置]
AppName=我的程序
AppVersion=1.5
DefaultDirName={pf}\My程序
[定制信息]
DotNetMissing=.NET Framework 3.5缺失。你想下载吗?安装程序现在将退出!
[守则]
函数IsDotNET35Detected:布尔值;
变量
错误代码:整数;
安装值:基数;
开始
结果:=真;
如果不是RegQueryWordValue(HKLM,'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5',
'安装'、InstallValue)或(InstallValue 1),然后
开始
结果:=假;
如果MsgBox(ExpandConstant({cm:DotNetMissing}')、mbConfirmation、MB_YESNO)=y,那么
ShellExec(“”,'http://www.microsoft.com/downloads/details.aspx?FamilyID=333325fd-ae52-4e35-b531-508d977d32a6&DisplayLang=en',
'',开关显示正常,ewNoWait,错误代码);
结束;
结束;
函数初始化设置:布尔;
开始
结果:=检测到ISDOTNET35;
结束;

我知道我没有回答你的任何问题。我很快会回来更新。。。但我现在得走了…谢谢你。我试试看。更高的(>3.5)版本怎么样?如果安装了FW 4.0,它就满足了3.5的需求,这是真的吗?这取决于您的应用程序,如中所述。但没有人明确表示,如果您在未安装.NET Framework 3.5的计算机上安装了.NET 4.5,您将能够应用检测。请问这听起来如何?我想我会检查所有三个:3.5、4.0和4.5;如果没有安装-我停止安装并要求用户下载v3.5;如果没有安装3.5,但安装了4.0或4.5,我会让用户决定是停止并下载3.5,还是尝试安装并启动我的应用程序如果我有Windows 7的最终版本,我会尝试在XP模式下模拟所有这些(或者其他虚拟机,如果我有)。如果我没记错的话,没有SP的普通Windows XP只预装了.NET Framework 2.0,因此安装例如4.5版将显示注册表中的内容以及4.5版真正安装的内容。但我没有这些:-(