zoukankan      html  css  js  c++  java
  • 【华磊原创】安装程序自动检测安装.Net Framework运行环境(使用InnoSetup)

    最近公司开发了一个WinForm的项目,部署人员在制作安装程序的时候问到怎么在安装程序中自动检测是否安装.Net Framework,由于是使用InnoSetup制作的安装程序,InnoSetup本身是支持Pascal脚本的,于是撰写了如下的代码来实现自动检测安装.Net Framework的功能。

    InnoSetup可在在脚本中插入[Code]代码段,其中的代码可以通过事件驱动,支持的主要事件如下:   

    • function InitializeSetup(): Boolean; ——安装程序初始化,返回值决定安装程序是否继续执行。   
    • function NextButtonClick(CurPageID: Integer): Boolean; ——点击下一步按钮,返回值决定安装程序是否继续执行。    
    • function BackButtonClick(CurPageID: Integer): Boolean; ——点击上一步按钮,返回值决定安装程序是否继续执行。   
    • function InitializeUninstall(): Boolean; ——卸载程序初始化,返回值决定卸载程序是否继续执行。  
    • ...

    从这些事件我们可以看到InitializeSetup()满足我们的要求,我们可以在这个时候去检查注册表或者是系统文件来判断客户机器上是否安装了.Net Framework,从而进行自动安装或者下载安装的操作。

    最终代码如下:


    [Code]
    
    function InitializeSetup: Boolean;
    
    var Path:string ;
    
        ResultCode: Integer;
    
        dotNetV2RegPath:string;
    
        dotNetV2DownUrl:string;
    
        dotNetV2PackFile:string;
    
    begin
    
      dotNetV2RegPath:='SOFTWARE\Microsoft\.NETFramework\policy\v2.0';
    
      dotNetV2DownUrl:='http://www.xxx.com/down/dotNetFx_v2.0(x86).exe';
    
      dotNetV2PackFile:='{src}\dotNetFx_v2.0(x86).exe';
    
      if RegKeyExists(HKLM, dotNetV2RegPath) then
    
      begin
    
        Result := true;
    
      end
    
      else
    
      begin
    
        if MsgBox('系统检测到您没有安装.Net Framework2.0运行环境,是否立即安装?', mbConfirmation, MB_YESNO) = idYes then
    
        begin
    
    
    
          Path := ExpandConstant(dotNetV2PackFile);
    
          if(FileOrDirExists(Path)) then
    
          begin
    
            Exec(Path, '/q', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
    
            if RegKeyExists(HKLM, dotNetV2RegPath) then
    
            begin
    
               Result := true;
    
            end
    
            else
    
            begin
    
               MsgBox('未能成功安装.Net Framework2.0运行环境,系统将无法运行,本安装程序即将退出!',mbInformation,MB_OK);
    
            end
    
          end
    
          else
    
          begin
    
            if MsgBox('软件安装目录中没有包含.Net Framework的安装程序,是否立即下载后安装?', mbConfirmation, MB_YESNO) = idYes then
    
            begin
    
              Path := ExpandConstant('{pf}\Internet Explorer\iexplore.exe');
    
              Exec(Path, dotNetV2DownUrl , '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
    
              MsgBox('请安装好.Net Framework2.0环境后,再运行本安装包程序!',mbInformation,MB_OK);
    
              Result := false;
    
            end
    
            else
    
            begin
    
              MsgBox('不下载安装.Net Framework2.0运行环境,系统将无法运行,本安装程序即将退出!',mbInformation,MB_OK);
    
              Result := false;
    
            end
    
          end
    
        end
    
        else
    
        begin
    
          MsgBox('没有安装.Net Framework2.0运行环境,系统将无法运行,本安装程序即将退出!',mbInformation,MB_OK);
    
          Result := false;
    
        end;
    
      end;
    
    end;
    

    使用的时候将上面的代码段复制到您的安装脚本中进行编译(您可以更改dotNetV2RegPath、dotNetV2PackFile和dotNetV2DownUrl来更改默认的参数),最后将.Net Framework的安装包“dotNetFx_v2.0(x86).exe”放在与安装程序同一目录中即可。

    安装程序执行时将检查客户计算机是否安装了.Net Framework 2.0,如果没有安装,则会调用同一目录下的.Net安装包进行安装,如同一目录下没有.Net安装包,则提示从网络上下载.Net安装包。.Net安装包安装完毕后将自动继续执行您的安装程序。

    本文作者:华磊 出处:http://www.cnblogs.com/hualei/
    本文版权归华磊和博客园、CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。该文章也同时发布在我的独立博客中-博客园-华磊CSDN-华磊
    特别授权:敏捷开发(SCRUM)系列文章特授权上海火速转载使用并应用到研发项目“火速智卓-用心连接企业员工的微信企业号应用平台”的管理中。
    小规模研发团队的敏捷开发(SCRUM)全集
    JQuery+FlexiGrid+asp.net完美解决方案-开源项目dotNetFlexGrid,构建快速的Ajax应用程序[官网][下载]。
  • 相关阅读:
    501. Find Mode in Binary Search Tree
    [leetcode]Evaluate Reverse Polish Notation
    [leetcode]LRU Cache
    [mock]12月27日
    [mock]12月28日
    [leetcode]Max Points on a Line
    *[topcoder]JumpFurther
    [mock]12月11日
    *[topcoder]GUMIAndSongsDiv1
    [leetcode]Reorder List
  • 原文地址:https://www.cnblogs.com/hualei/p/1807416.html
Copyright © 2011-2022 走看看