用Inno Setup来解决.Framework框架安装问题

2024-02-17 07:18

本文主要是介绍用Inno Setup来解决.Framework框架安装问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

   前段时间朋友接了一个项目,具体是开发一个安装在局域网内的软件,这个软件会定时连接局域网内的服务器来更新本地客户端的一些信息,因为在局域网内存在着多种不同的Windows版本,从WindowsXPWindows2003Windows2008Windows7等,这个软件采用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安装文件安装,然后继续安装和配置开发的软件。

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

上面这段代码的作用是通过检查注册表来判断客户机上是否安装了.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安装文件从安装包里解压缩出来到临时文件夹下并从临时文件夹下安装,否则就直接安装开发后的软件,临时文件夹下的文件会在系统重新系统启动时被自动清理,不用担心占用磁盘空间。

以下是部分关键代码:

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

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

这篇关于用Inno Setup来解决.Framework框架安装问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/717048

相关文章

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec