杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2263|回复: 0

Inno Setup 安装前判断是否安装了Net Framework,否则从网络下载或从本地安装

[复制链接]
发表于 2015-1-27 21:42:50 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x
      很多用户在制作安装包的时候,要从注册表中判断客户的电脑中是否安装 Net Framework 组件,如果没有安装则从网络下载安装,或者从临时文件中安装。网络下载减少安装包体积,要是用户没有联网就麻烦了,所以,本站提供了两个思路,就用两种方法吧!

方法一,判断不存在则从网络下载
  1.   [code]
  2.   function InitializeSetup: Boolean;
  3.   var Path:string ;
  4.          ResultCode: Integer;
  5.   begin
  6.      if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\.NETFramework\policy\v2.0') then
  7.      begin
  8.          Result := true;
  9.      end
  10.      else
  11.      begin
  12.          if MsgBox('系统检测到您没有安装.Net Framework2.0,是否立刻下载并安装?', mbConfirmation, MB_YESNO) = idYes then
  13.          begin
  14.              Path := ExpandConstant('{pf}\Internet Explorer\iexplore.exe');
  15.              Exec(Path, 'http://www.xxx.com/down/dotnetfx2.exe', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
  16.              MsgBox('请安装好.Net Framework2.0环境后,再运行本安装包程序!',mbInformation,MB_OK);
  17.              Result := false;
  18.          end
  19.          else
  20.          begin
  21.              MsgBox('没有安装.Net Framework2.0环境,无法运行XXX程序,本安装程序即将退出!',mbInformation,MB_OK);
  22.              Result := false;
  23.          end;
  24.      end;
  25.   end;
复制代码

方法二,从本地安装
  1. [Files]
  2. .........
  3. Source: "F:\sgzy\dotnetfx20.exe"; DestDir: "{tmp}"; Flags: ignoreversion
  4. ; 文件释放到临时文件中,重启后自动删掉   

  5. [code]
  6. function CheckDotNet2_0():boolean;
  7. begin
  8. Result:=not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\.NETFramework\policy\v2.0');
  9. end;

  10. function InitializeSetup(): Boolean;
  11. var Path:string;
  12.         ResultCode: Integer;
  13. begin
  14.     if CheckDotNet2_0() then
  15.     begin
  16.         ExtractTemporaryFile('dotnetfx20.exe');
  17.         Exec(ExpandConstant('{tmp}\dotnetfx20.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
  18.     end;
  19. end;
复制代码
  1. [Files]
  2. Source: "E:\Program Files\XX\dotNetFx40_Client_setup.exe"; DestDir: "{tmp}"; Flags: ignoreversion

  3. ; dotNetFx40_Client_setup.exe是个.net4.0预安装包,免去了打开网页下载等步骤,提升用户体验,同时体积也小
  4. ; dotNetFx40_Client_setup.exe不和其他软件文件放在一个目录,它就不会拷贝到安装后的目录中,而是在临时目录中,这样重启机器之后就会被删除掉



  5. [Code]
  6. function CheckDotNet4_0():boolean;
  7. begin
  8. Result:=not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\.NETFramework\policy\v4.0');
  9. end;

  10. function InitializeSetup(): Boolean;
  11. var Path:string;
  12. ResultCode: Integer;
  13. begin
  14. if CheckDotNet4_0() then
  15. begin
  16. if MsgBox('系统检测到您没有安装.Net Framework4.0,是否立刻下载并安装?', mbConfirmation, MB_YESNO) = idYes then
  17. begin
  18. ExtractTemporaryFile('dotNetFx40_Client_setup.exe');
  19. Exec(ExpandConstant('{tmp}\dotNetFx40_Client_setup.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
  20. Result := true;
  21. end
  22. else
  23. begin
  24. MsgBox('没有安装.Net Framework4.0环境,无法运行【XX】程序,本安装程序即将退出!',mbInformation,MB_OK);
  25. Result := false;
  26. end;
  27. end
  28. else
  29. begin
  30. Result := true;
  31. end;
  32. end;

复制代码

备注:
     举一反三,大家开动扩散思维,该方法一样适用于检测.Net Framework3.0/3.5/4.0/4.5或者其他软件,依此类推。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-19 22:23 , Processed in 0.125394 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表