用Inno Setup来解决.NetFramework安装问题

2010-03-01 09:59:26

标签:.Net Framework Setup 休闲 Inno

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://zhoufoxcn.blog.51cto.com/792419/279243

前段时间朋友接了一个项目,具体是开发一个安装在局域网内的软件,这个软件会定时连接局域网内的服务器来更新本地客户端的一些信息,因为在局域网内存在着多种不同的Windows版本,从WindowsXP、Windows2003及Windows2008到Windows7等,这个软件采用VS2008/.Net Framework2.0开发,因为有些系统默认没有安装.Net Framework2.0,所以在运行时需要确保客户机上已经安装上.Net Framework2.0,于是想到将软件打包。

制作软件安装包有几种工具和方案:一是利用Visual Studio自带的安装包制作工具;二是利用InstallShield这类收费的、专业的安装包制作工具;三是利用Inno Setup这类免费的、专业的安装包制作工具。

对Visual Studio自带的安装包制作工具研究得不深,早期曾经尝试过将软件打包成一个安装文件内,不过最终失败了,后来干脆就不再研究了;InstallShield这类收费的安装包制作软件功能确实强大,不过上手确实也不容易,再加上是收费的(尽管可以找到破解版,但是总觉得不爽),于是转而寻求利用Inno Setup来解决。

Inno Setup 是一个免费的 Windows 安装程序制作软件,它支持现在所有正在使用的 Windows 版本: 7, 2008 R2, Vista, XP, 2008, 2003, 2000, Me, 98, 95, 和 NT 4.0 (不需要服务包)。 并且Inno Setup最早出现在1997年,是一个免费开源的软件,即使作为商业使用也是如此。Inno Setup的官方网站网址是http://www.jrsoftware.org,当然也可以下载它的中文版本,比如[枫林夜思雨]汉化的Inno Setup就还不错,我给朋友打包时用的是英文版Inno Setup文件,只不过安装文件中用到的.isl文件被我翻译成中文了。

我们想到的办法就是将软件制作成安装包,运行安装包的时候会检查客户机上是否安装了.Net Framework2.0,如果没有则从局域网内服务器上下载.Net Framework2.0安装文件安装,然后继续安装和配置开发的软件。

从网上搜到这个一个解决方案,代码如下:

[code]
  function InitializeSetup: Boolean;
  var Path:string ;
         ResultCode: Integer;
  begin
     if RegKeyExists(HKLM, ‘SOFTWARE\Microsoft\.NETFramework\policy\v2.0‘) then
     begin
         Result := true;
     end
     else
     begin
         if MsgBox(‘系统检测到您没有安装.Net Framework2.0,是否立刻下载并安装?‘, mbConfirmation, MB_YESNO) = idYes then
         begin
             Path := ExpandConstant(‘{pf}\Internet Explorer\iexplore.exe‘);
             Exec(Path, ‘http://www.xxx.com/down/dotnetfx2.exe‘, ‘‘, SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
             MsgBox(‘请安装好.Net Framework2.0环境后,再运行本安装包程序!‘,mbInformation,MB_OK);
             Result := false;
         end
         else
         begin
             MsgBox(‘没有安装.Net Framework2.0环境,无法运行XXX程序,本安装程序即将退出!‘,mbInformation,MB_OK);
             Result := false;
         end;
     end;
  end;

上面这段代码的作用是通过检查注册表来判断客户机上是否安装了.Net Framework2.0,如果没有就从http://www.xxx.com/down/dotnetfx2.exe处下载,并提示用户安装下载的.Net Framework2.0的程序之后再安装本程序。这么做有一个优点,因为并不是所有的机器都没有安装.Net Framework2.0,所以仅仅是一部分没有安装的机器才会需要下载,这样也就不需要将.Net Framework2.0打包进安装包,是安装包比较小。

不过这样在某些情况下也会出现问题,比如开发了一个不错的软件,用户在办公室里上网并下载和安装了这个软件,觉得不错,拷贝到家里没有上网的机器上时就不能安装和使用了,这样麻烦就来了。因此下面想到了另一种解决办法,这种办法就是将.Net Framework2.0打包进安装文件,在安装开始之前检查客户机上是否安装了.Net Framework2.0,如果没有安装就将.Net Framework2.0安装文件从安装包里解压缩出来到临时文件夹下并从临时文件夹下安装,否则就直接安装开发后的软件,临时文件夹下的文件会在系统重新系统启动时被自动清理,不用担心占用磁盘空间。

以下是部分关键代码:

[Files]
.........
Source: "F:\周公的专栏\dotnetfx20.exe"; DestDir: "{tmp}"; Flags: ignoreversion
; 周公的专栏友情提示:dotnetfx20.exe并不会拷贝到安装后的目录中,而是在临时目录中,这样重启机器之后就会被删除掉

[code]
function CheckDotNet2_0():boolean;
begin
Result:=not RegKeyExists(HKLM, ‘SOFTWARE\Microsoft\.NETFramework\policy\v2.0‘);
end;

function InitializeSetup(): Boolean;
var Path:string;
        ResultCode: Integer;
begin
    if CheckDotNet2_0() then
    begin
        ExtractTemporaryFile(‘dotnetfx20.exe‘);
        Exec(ExpandConstant(‘{tmp}\dotnetfx20.exe‘), ‘‘, ‘‘, SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
    end;
end;

通过上面的代码确保了不会将dotnetfx20.exe拷贝到安装后的文件夹中,在Visual Studio和InstallShield相信也应该会有这样的功能,只是笔者没有找到,这个功能我觉得比较实用,如果客户机器上已经安装了.Net Framework2.0的话不会在安装时不会感觉到有什么,如果没有安装就会将dotnetfx20.exe释放到临时文件夹下,并从临时文件夹下安装.Net Framework2.0,这样确保dotnetfx20.exe不会占用安装文件夹的空间。这样制作安装包的好处是在安装软件时无需担心用户是否联网,缺点是使安装文件略显有点大,因为制作的安装包中要包含一个20多M的dotnetfx20.exe,不过在网速和存储设备都不是问题的今天,这个不是什么太大的问题,当然是有点让人感觉略微地不爽,可能自己开发的软件才数百K,而必须附带一个20多M的dotnetfx20.exe。这也是没有办法的事情,像早期可以跨*nix和Windows的Java和现在可以跨不同版本的.NET,为了实现在不同平台上有相同的表现,就必须要运行时的支持,正所谓熊掌鱼肉不可兼得,虽然有些第三方开发的软件可以将Java或者.NET平台上的软件制作成无需运行时支持的exe文件,但是能否在各个平台上得到一致的表现,有待考证。

其实这种做法不仅可以用于检测.Net Framework2.0的情况,也可以用于其它情况,比如检测.Net Framework3.0或者.Net Framework3.5的情况,特别是当你向朋友展示你开发的WPF应用时;此外,还可以用于部署Java SE项目。

周公

2010年2月28日

时间: 2024-10-06 14:50:58

用Inno Setup来解决.NetFramework安装问题的相关文章

使用Inno Setup 打包.NET程序,并自动安装.Net Framework

使用Inno Setup 打包.NET程序,并自动安装.Net Framework http://www.cnblogs.com/xiaogangqq123/archive/2012/03/19/2405730.html Inno Setup是什么 Inno Setup 是一个windows系统下的安装包制作程序.它是免费的(而且允许免费用于商业用途).官网网站:http://www.jrsoftware.org/ 虽然说.NET 可以使用VS来打包安装包,但可定制化绝对不如Inno Setup

Inno Setup

Inno Setup 是一款免费的window是安装制作软件,在功能设置和稳定性上的竞争力可能已经超过一些商业的安装程序制作软件.安装程序用编译脚本(.iss)的方式创建,脚本为类似.ini文件格式的ASCII码文本文件,根据产品需求可通过脚本控制程序安装位置.创建快捷方式等功能属性.这里稍整理下一些常用属性功能:1.Inno setup脚本demo2.安装协议默认同意3.组件选择框 4.跳过特定的安装界面5.信息包含换行符号6.删除文件和删除文件夹7.自定义BeveledLabel文字8.安装

inno setup介绍及官方网站地址

使 用 笔 记 1.Inno Setup 是什么?Inno Setup 是一个免费的 Windows 安装程序制作软件.第一次发表是在 1997 年,Inno Setup 今天在功能设置和稳定性上的竞争力可能已经超过一些商业的安装程序制作软件.关键功能:★ 支持现在所有正在使用的 32 位 Windows 版本: Windows 95,98,2000,Server 2003,XP,Me,NT 4.0 (不需要服务包). ★ 支持创建单个 EXE 格式的安装程序,使你的程序可以很方便地在网络上发表

使用inno setup打包程序完整脚本(.net框架检测,重复安装检测)

; 脚本由 Inno Setup 脚本向导 生成!; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档! #define MyAppName "小小鸟软件"#define MyAppVersion "2012.2.29"#define MyAppPublisher "小小鸟科技"#define MyAppURL "http://www.cnblogs.com/IT-SmallBird/"#define MyAp

Inno Setup 安装、卸载前检测进程或服务

[转载]Inno Setup 安装.卸载前检测进程或服务 (2015-04-24 17:37:20) 转载▼ 标签: 转载   原文地址:Inno Setup 安装.卸载前检测进程或服务作者:一去丶二三里 在用Inno打包期间遇到了一些小问题,在这里总结一下: Inno.iss部分内容如下: 1.32位程序的PSVince.dll插件方法. [Files] Source: psvince.dll; Flags: dontcopy [Code] function IsModuleLoaded(mo

解决Inno Setup制作安装包无法创建桌面快捷方式的问题

转自:http://yedward.net/?id=104 昨天想把个java程序做成exe安装软件,然后就去下载了Inno Setup这个软件安装包制作软件,Inno Setup这个软件确实非常好用,但是由于我下载的中文汉化版,根据向导一步步来就是不创建桌面快捷方式,折腾了很久,终于找到了解决方法. 下面是我使用Inno Setup打包软件后自动生成的一段代码: 1 2 3 [Tasks] Name: "desktopicon"; Description: "{cm:Cre

Inno setup定制安装界面

原文:Inno setup定制安装界面 Innosetup功能很强大,可以通过它提供的Wizard接口来定制界面,但我对PASCAL语言不熟悉,也不清楚通过那种接口可改动的范围有多大,最后做出来的效果是否好,所以选择了通过一个DLL来实现我的界面. 首先,脚本中增加如下设置,以禁至所有Inno setup自身显示的界面: DisableDirPage=yes DisableFinishedPage=yes DisableProgramGroupPage=yes DisableReadyMemo=

一键搞定Java桌面应用安装部署 —— exe4j + Inno Setup 带着JRE, 8M起飞

转载自:http://www.blogjava.net/huliqing/archive/2008/04/18/193907.html 对于作Java桌面应用来说,比较烦人的就是安装部署问题,客户端是否安装有jre.jre版本问题.jre去哪下载.如何用jre启动你的Java应用?不要说刚接触电脑的人,就算是比较熟悉电脑,如果没有接触过Java,面对一个Java应用,如何在Windows下启动它,估计都会折腾半天.如果不是因为这个问题,Java在我的眼里算是最完美的语言了,也是我最喜爱的语言.

解决Inno Setup制作中文安装包在非中文系统上显示乱码的问题

尼玛,好几个月没更新了.囧... 目前我司新的客户端开发已经接近尾声,该改的bug已经改完,该重构的地方也都差不多了.视觉效果也已经根据美工的样式改完了.所以,就差制作安装包了.正所谓万事俱备,只欠东风. 首先,当然是选用了InstallShield Limited Edition来制作安装包了.这个工具说简单,是真的简单.全部都是图形化的,并且可以和VS很好结合.如何使用的细节,这里就不表了.网上一搜一大堆.InstallShield LE版最大的问题是开放的功能实在太少了,我想在安装包中打一