.NET对软件安装的冲击

.NET对软件安装的冲击

什么是.NET?

.NET是如何改变整个软件安装的?
.NET改变了我们进行软件安装的许多方式。最明显的,我们有了新的语言C#。还有,操作系统也发生了微妙的变化,以及它处理共享代码的方式。

关于元数据(Metadata)
首先,你必须了解什么是Managed Code?所有基于微软中间语言(MSIL)的代码都是以Managed Code运行的。比如.NET推出的新语言C#就完全是以Managed Code运行的。而其他Visual Studio .NET附带的语言,比如Visual C++,允许Managed Code 和None-managed Code 混合使用。
那么Managed Code 有什么特点呢?它与None-Managed Code 的最大区别就是包含了元数据(Metadata)。元数据描述了代码里的每一个元素,允许.NET的运行库对其进行管理,并使得代码可以自描述(Self-Describing)。.NET运行库通过使用元数据来提供诸如内存管理、跨语言集成、代码安全和对象生命周期自动控制等等服务。简单的说,Managed Code就是可以与.NET运行库以“契约合作”的方式运行的代码。
元数据可以包括assemblies、可装载文件、类型、方法等等。与制作安装关系最为密切的就是assembly manifest了。Assembly是一个程序的主要组成部分,包括了所有的功能、版本信息,并作为一个整体进行发布。每一个Assembly都要包括一个assembly manifest,并使得assembly 可以自描述。Manifest包括:

以文本表示的assembly 标识、版本等,如果要与别程序共享,还要包括数字签名。
描述包括的文件
指定assembly的类型和资源,并指明该assembly输出哪些。
列举所有依赖的assembly。
指明运行需要的许可权限
Manifest里也包括了以前是由自注册(Self-Registration)来完成的数据。比如所有的类型信息存放在Manifest里,这些Manifest数据又都放在.DLL或.EXE文件里。这样通过Manifest我们就可以很容易的知道Managed Code 的相互依赖关系,而不会漏掉任何信息。但是,如果是Managed Code 和None-Managed Code的混合情况,就不是那么容易做到了。
如果没有一种新的安装技术出现,开发者将面临一个大难题。

对自安装(Self-Installing)代码的误解
其中一个就是,使用Managed Code编写的软件不需要安装。因为一些安装的任务已经由元数据完成了,比如COM组件的注册。只要把程序的所有文件拷贝到一个目录下面,就可以直接运行了。很遗憾,这并不是软件安装的全部过程。
软件安装并不是简单的把文件从位置A拷贝到位置B。软件安装程序应该是给用户提供一个友好的、可靠的和统一的方式,把软件安装到用户的机器上面。首先,安装程序需要通过一个统一的熟悉的用户界面,让用户选择安装的选项,然后创建文件夹、快捷方式,进行升级、网络安装,还有许可证管理等等。在上面的例子里,你无法为用户完成所有这些事情,更不用说许可证管理了。
另外,Managed Code 和None-managed Code混合的应用程序也不能自安装。而且,要安装这样的程序比安装纯粹的None-managed Code 还要麻烦。我们不可能一下子全部丢掉以前的代码,全部转成Managed Code 。所以,我们不得不认真的考虑这个问题。

Isolated Applications and Side-by-Side Components
在Windows XP和.NET平台里,微软提供了一套机制来减少DLL Hell的发生。我们知道,应用程序一般都依赖于一些共享资源,所谓共享,就是说如果已经有一个资源安装在了系统上,应用程序就不再需要安装该资源了,直接使用就可以了。于是DLL Hell就这样发生了,如果一个应用程序需要一个比系统上现有的共享资源版本更高的资源,于是它以新的高版本的资源代替了老版本。而且有这样的可能,新版本的资源并不能与老版本的资源相兼容。而系统中只能存在该资源的一个版本,所以依赖于老版本资源的应用程序将崩溃!

为了解决这个问题,微软提供了两种方法:Isolated Applications 和Side-by-Side Components。
Isolated Application 就是让应用程序在发布的时候,附带了该程序所有组件的隔离版本(Isolated Version),这样就不会受其他安装程序影响了。但是这需要完全重写代码,代价太高。
Side-by-Side组件就是可以在新旧版本的共享资源一起共存的环境中运行。Windows XP中的许多共享资源就是以Side-by-Side的方式来编写的。开发者可以通过使用编写Application Manifest来达到Side-by-Side 的好处。Application Manifest描述了程序所依赖的组件的版本信息,所以操作系统可以根据这些信息来装载正确的共享资源。比如应用程序是在COMCTL32的V5上进行开发的,并在Application Manifest里指明了依赖于COMCTL32的V5版本。现在,即使系统上存在有别的版本的COMCTL32,操作系统也仍将为该程序装载V5版本的资源。

…..

时间: 2024-12-03 18:14:58

.NET对软件安装的冲击的相关文章

有关OCS监控软件安装在windows上, 服务端显示乱码的问题

    OCS监控软件服务端目前安装在windows服务器上,但windows操作系统的默认字符集是是cp936,即gbk,可以通过chcp命令查看   导致OCS自带的MYSQL无法将字体集设置为utf8,最终在OCS服务器显示为乱码   解决方案如下: 1:将OCS监控软件安装到linux服务器上 2:修改OCS监控软件的代码,在连接数据库时指定utf8编码或在创建连接后执行"SET NAMES 'utf8'"   建议按照方案1执行.

用户交互设计:软件安装一般页面流程

文章描述:用户交互设计:软件安装一般页面流程. 混乱的安装界面和不畅的安装流程把前来拜访的用户拒之门外,也使软件的功能得不到充分的定制和发挥.由于对互联网产品的爱好,我经常安装软件,在这之中发现许多不好的地方,在这将共通的内容提出来分析一下.   现有软件安装一般页面流程: what's new页>>许可条款页>>选择组件>>软件大小信息,选择安装路径和快捷方式显示位置>>安装进度页>>附带推广软件页,和立即运行.开机启动.设为首页.显示新特性等

Windows server 2003软件安装全攻略

采用软件安装的好处:自动修复,自动升级,远程删除. 软件部署:是指将公司所拥有的软件资源,集中邮系统管理员决定以何种方式,分配给哪些用户或计算机;三种方式: 发布给用户:当某个软件发布给用户以后,如果下一次用户以任何一台计算机登录域,那么该软件都会出现在控制面板的添加或删除程序中,供其下载安装. 指派给用户:是比发布更具有强制性的部署方式,当软件被指派给用户时,如果下次用户从任一台计算机登录域时,那么会在开始/所有程序菜单或桌面看到该软件的快捷方式,同时计算机的注册表数据库也会登记该项软件的相关

AD部署教程:域软件安装策略

大家一定遇到过在域里同时安装同一个软件 如果手动安装一定很繁琐,效率很差 在这里我写一下如何借助组策略的软件分发功能! 软件必须先制作成MSI格式,可以使用 Advanced Installer进行制作 (小科普::MSI(Microsoft Software Installer,微软软件安装器)文件是"Windows Installer"能够部署的仅有的两种文件类型之一.Windows Installer是Microsoft公司制定的一种安装文件标准,采用这种标准的安装文件会采取一种

简述Linux下的软件安装

对于Windows的用户来说,软件安装的确是没有什么学问,一直Next或者改一下路径,软件就会装好了.但是在Linux下可没这么简单了. Linux下的软件安装主要有三种方式,分别是rpm(RedHat系列)或DPKG(Debian系列).yum(RedHat系列)或APT(Debian系列)和Tarball. 由于rpm.yum等的安装方式都非常简单,在这里就不再详述了,就举一个例子来说明吧,在Windows上360.金山这些系统管理软件相信大家都有用过,yum的软件安装方式就类似于你在360

Linux下软件安装详解

在Windows下安装软件时,只需用鼠标双击软件的安装程序,或者用Zip等解压缩软件解压缩即可安装.在Linux下安装软件对初学者来说,难度高于Windows下软件安装.下面我就详细讲解Linux下如何安装软件. 先来看看Linux软件扩展名.软件后缀为.rpm最初是Red Hat Linux提供的一种包封装格式,现在许多Linux发行版本都使用:后缀为.deb是Debain Linux提供的一种包封装格式:后缀为.tar.gz.tar.Z.tar.bz2或.tgz是使用Unix系统打包工具ta

Oracle 10203 RAC环境添加新节点(五)添加节点的软件安装过程中的问题

简单描述一下,在Oracle 10203 for Solaris sparc的RAC双节点环境中,新增一个节点的过程.共享存储已经在第三个节点上配置完成,这里主要介绍操作系统上和Oracle上的配置. 简单描述添加节点的软件安装过程中碰到的问题. 第一个错误是在运行ADDNODE.SH工具时碰到的,在节点3的安装过程中出现了空间不足的错误: INFO: ld.so.1: lsnodes: fatal: libskgxn2.so: open failed: No such file or dire

Linux基本配置和管理 7 软件安装:源码和Tarball

一 开放源码的软件安装和升级简介 1 Linux上面的软件几乎都是经过GPL的授权,所以每个软件几乎均提供源代码,并且你可以自行修改 程序代码 2 在Linux系统上面,一个文件能不能被执行看的是有没有可执行的那个权限(具有x权限),不过 Linux上面真正识别的可执行文件其实是二进制文件,例如/usr/bin/passwd 3 程序代码文件其实就是一个一般的纯文本文件,在完成这个源码文件的编写之后,再来就是要将这 个文件"编译"成为操作系统看的懂的二进制文件,而要编译自然要写&quo

软件安装过程的交互设计

混乱的安装界面和不畅的安装流程把前来拜访的用户拒之门外,也使软件的功能得不到充分的定制和发挥.由于对互联网产品的爱好,我经常安装软件,在这之中发现许多不好的地方,在这将共通的内容提出来分析一下. 现有软件安装一般页面流程: what's new页>>许可条款页>>选择组件>>软件大小信息,选择安装路径和快捷方式显示位置>>安装进度 页>>附带推广软件页,和立即运行.开机启动.设为首页.显示新特性等>>完成 然而,用户心理过程却是这样的