软件在安装时,到底做了些什么?

UOS利用系统安装光盘做本地apt源安装软件包 UOS利用系统安装光盘做本地apt源安装软件包 普通用户可能没有权限执行mount命令,因此建议使用root用户或具有sudo权限的用户执行如下操作。 1.可以使用系统安装光盘,或者系统ISO镜像制作本地apt源。 若使用系统安装光盘。将光盘插入服务器光驱,然后执行如下命令挂载光盘到/media/cdrom目录: # mount /dev/cdrom /media/cdrom 若使用系统ISO镜像。将系统ISO镜像上传至服务器(如/home/kingbase),然后执行如下命令挂载ISO镜像到/media 阅读详情

软件在安装时,到底做了些什么? 大家每天都在用电脑,可能也经常在自己的电脑上安装软件。就算自己没安装过,至少也看到人家安装过软件。在这里,我不是想教你怎么安装软件,而是想向你展示,软件在安装的过程中,到底都做了些什么动作?为什么有些软件要安装,直接拷贝过去却不能用?为什么一些软件安装或卸载之后要重启。下面要讨论的就是这些问题。

首先,我们探讨一下软件安装的共通部分,说共通,就是在不同版本的操作系统上,如WINDOWS98,WIN2K和WINXP等上它们都有共同点的地方。这个文章也试图不针对具体的某个操作系统,而对共同的规律来探讨,不过我自己用的是WINDOWS98,所以有时一些例子可能会用WINDOWS98上的实例来说明,而大多数情况下这些特***在WIN2K和WINXP上也是类似的。

那么,我先来归纳一下,典型的软件安装过程都有可能做哪些事情。由于我们是讨论软件在安装时的行为,所以开始安装前的设置和选项我们就暂不讨论,只说到软件真正开始安装那个时候起的动作:

①文件从安装源位置拷贝到目标位置。

②往系统目录写入一些必要的动态连接库(DLL)。(可选)

③往系统注册表中写入相应的设置项。(可选)

④建立开始菜单里的程序组和桌面快捷方式。(可选)

⑤其他动作。(可选)

下面我们再详细来分析上面归纳出来的这些动作:

1)拷贝软件本身需要的文件。源位置指软件未安装之前的位置,例如光盘,下载的目录等,目标位置指你指定的安装位置。

这是几乎所有的软件安装过程一定会做的一件事。而如果一个软件,在安装时只要这一步,不需要后面的其他几步,我们可以认为这个软件就是绿色软件。或者反过来说绿色软件就是只要拷贝文件,不需要依赖于某个DLL,或者它依赖的DLL在几乎所有的系统中都一定有的,并且它也不依赖于注册表里面的设置项的软件。

2)这一步,可以说至少有一半软件在安装时都会做,一些软件,需要用到某个DLL,特别是那些软件作者开发的DLL,或者系统中不常用的DLL,一般都会随软件的安装拷到系统目录。所谓系统目录,在WIN98下一般是在WINDOWS\SYSTEM这个目录,而WIN2K是在WINNT\SYSTEM32,WINXP是在WINDOWS\SYSTEM32。还有,一些软件如QQ游戏,中游等,它们也用到一些DLL,由于这些DLL只是这个软件自己用到,别的其他软件不会用到,所以它们并不一定存在于系统目录,而是放在软件安装目录里面,这样的DLL已经在上一步中被拷贝,所以和这一步说的情况不一样。

3)这一步同样至少有一半软件会做,一般在安装前用户的设置和一些选项,在安装时就会把这些设置写到注册表里。另外就是有时在上一步把DLL拷贝到系统目录时,一些DLL需要向系统注册,这些DLL的注册信息也会写在注册表里。还有,一些软件有时可能安装时并不写注册表,而是在第一次运行时才把一些设置写到注册表。

4)这个非常简单,大概不需要怎么解释。建立这些快捷方式一方面是便于用户执行,另外在时也会把卸载的快捷方式放在程序组里。关于卸载后面我们再来讨论。

5)这个就是除了上面说的以外的其他情况。例如有些软件安装时会先把所有文件(或一部分文件)先解压到临时目录,那么安装完之后就要把这些文件删除掉。

那么我们再总结一下:

一、一个典型的软件在安装过程一般都会执行上面的1-4项。这样可以认为是一个完整的安装过程。

二、除了第1项之外,其他的都不是必要的。只需要第一项的软件,我们可以把它叫做绿色软件。

三、有些软件安装时是执行了1、2、4,有些软件是执行了1、3、4,有些软件是执行了1、4。

四、一个特殊的情况,一般的驱动程序,只会执行2和3,没有1和4。

五、理论上,任何软件,如果你非常确切地知道了它在上面的那几步都具体做了些什么,特别是2和3,那么,理论上你可以把这个软件的安装文件拷贝到另一台机子,把必要的DLL从系统目录拷贝到那一台机子的系统目录,再把注册表里软件写入的项目导出来(必要时还要修改一下)再导入到那台机子的注册表中,那么,就算不是绿色软件,你也能这样把它移植给另一台机。但有时特别是一些共享软件,一般都会有注册表中设置比较隐蔽的项目,不容易查找,所以除非你对系统非常熟悉,否则不是绿色软件的软件要移植还是有一定的难度的。

那么,下面我们再来看看,为什么一些软件安装后要重启。

在WINDOWS操作系统上,一般一个正在运行中的程序,操作系统是不让你修改它的,修改包括替换,改动和删除。那么有时,一些软件需要向系统目录中写入一个DLL,而系统目录中原来已经有同名的DLL并且这个DLL目前正在被系统使用,因此不能用新版本去替换它,这个时候就需要重启,在重启的过程中,在这个DLL旧的版本被使用之前用新版本替换它。这就是为什么要重启的原因。

你能看到这里,说明你很有耐心,并且对技术的探讨很有兴趣,那么我就再说得更详细些。在WIN98中,上面说的这个替换是由系统的一个工具来实现的,这个工具叫WININIT.EXE。安装程序在检测到需要写入的DLL或其他程序文件正在使用时,会把要写入的DLL文件先定一个临时的文件名,然后在WINDOWS目录中往WININIT.INI写入一个改写项,比如,一个叫ABCD.DLL的动态连接库现在正在使用中,而安装程序要往系统中写入新版本的ABCD.DLL,这时安装程序会把新版本ABCD.DLL先定一个临时文件名,例如AAAA.LLL,然后在WININIT.INI中的[rename]一节中写入这一项: ?筛l罉枓犮
C:\windows\system\abcd.dll=C:\windows\system\aaaa.lll CX?=B)
这样,在重启时,进入WINDOWS图形界面之前,WININIT.EXE在检测到WINDOWS目录中有WININIT.INI存在时,就执行里面的操作,在上面的例子中,是用C:\windows\system\aaaa.lll去替换掉C:\windows\system\abcd.dll这个文件,并且把WININIT.INI改名为WININIT.BAK。

另外,有些软件,在安装时,是把所有文件包括SETUP.EXE解压到临时文件里面再执行SETUP.EXE进行安装的,按理来说安装完要把所有的临时文件删除掉,这个操作当然也是由安装程序SETUP.EXE来完成,但它自己正在运行,也删不了它自己,所以也要重启来删除,做法和上面差不多,只是改成类似这样子的: 怦S?vH烨?
NUL=C:\WINDOWS\TEMP\SETUP.EXE

在WIN2K和WINXP中,存在类似的机制,不过并不是用WININIT.EXE和WININIT.INI来实现,具体的做法我也不是很清楚,长期以来我大多数时候都是在用WIN98,所以没认真研究过,但软件安装过程要重启的现象在2K和XP上是仍然存在的,原理也是在重启时替换或修改正在使用的文件,只是实现的方式不同。

最后,我们再来看看有关卸载方面的内容。一般卸载有好几种方式:

1)早期的安装程序,一般会在安装过程记录了上面说的安装过程的1234四个步骤中具体拷贝的文件和DLL以及注册表项,把它保存在INSTALL.LOG之类的文件中,再在软件的安装目录(或WINDOWS目录中)放一个UNINST.EXE之类的卸载程序。然后要么在程序组里为这个UNINST.EXE建一个快捷方式,要么在注册表中为这个UNINST.EXE建一个快捷方式(这?诳刂泼姘宓奶砑由境?绦蚓湍芸吹饺砑?男对叵?,并把INSTALL.LOG做为它的参数,这样就实现卸载了。

2)现在比较多的安装程序是用新版的INSTALLSHIELD生成的,安装时的记录和卸载程序一般是会放在C:\Program Files\InstallShield Installation Information这个文件夹(隐藏属***)里,同样也会在程序组和注册表中建立卸载项。

另外,在卸载时,也会遇到文件(一般是DLL文件)正在使用的情况。所以有时卸载的时候也要重启,就是要在重启过程中删掉这些正在使用的DLL文件。

关于软件的安装过程,大概就想到这里,以后再有想到什么的,我再补充,大家有什么看不懂的也可以把问题提出来。

[NSIS] 用NSIS做一个软件升级安装包 在《NSIS使用心得 I》这篇中简要介绍了一下NSIS的脚本编写,通过文章中的介绍相信各位高手很快就做了一个有特色的程序安装包了。但相信不是每个人写的软件都只发布一次就可以了,肯定要有修改和维护的情况发生。在这种情况下,您可能就需要一个程序的升级安装包了。 下面介绍一个简单的升级安装包的制作。(如果有更好的升级方法,希望各位高手能发表评论,我也好学习学习) /* --------------- 阅读详情

相关推荐

上海市大数据中心笔试模拟试卷

为帮助考生熟悉上海市大数据中心笔试的题型、考点及答题逻辑,以下整理了一份的模拟试卷,涵盖大数据专业知识、行政职业能力测试(行测)、公共基础知识(含上海本地政策)三大核心模块,并附详细答案解析。

一叶之秋的博客 1814

软件安装原理

软件在安装时,到底做了些什么? 大家每天都在用电脑,可能也经常在自己的电脑上安装软件。就算自己没安装过,至少也看到人家安装过软件。在这里,我不是想教你怎么安装软件,而是想向你展示,软件在安装的过程中,到底都做了些什么动作?为什么有些软件要安装,直接拷贝过去却不能用?为什么一些软件安装或卸载之后要重启。下面要讨论的就是这些问题。 首先,我们探讨一下软件安装的共通部分,说共通,就是在不同版本的...

vay156630557的博客 2003

【银河麒麟服务器】银河麒麟V10 SP3高级服务器操作系统网卡配置完全指南:图形界面、Network、NetworkManager、IP 地址、路由与端口聚合详解

本文系统介绍了银河麒麟V10SP4服务器操作系统的网络配置方法,涵盖图形界面、NetworkManager、nmcli命令行等多种配置方式。重点讲解了IP地址设置、路由管理以及端口聚合(Bonding)的实现,包括传统配置文件、nmcli和nmtui三种Bonding配置方案。文章对比了NetworkManager与传统network服务的区别,并提供了常见网络问题的排查建议。通过多种配置方法的详细说明,帮助用户掌握银河麒麟服务器系统的网络管理技能,构建稳定可靠的网络环境。

YHLCCY的博客 5361

【Android应用开发】-(9)应用程序安装卸载原理

本文粗体部分来自网络上的一篇文章,已不知出处,知道的告知,在此谢谢原作者。引出安装卸载的原理之前,先实现一个简单的安装卸载应用程序的功能。文章是我之前写的一篇博客,这里就不在叙述,只补充几点: 1、由于代码中用到了PackageInstallObserver,PackageInstallObserver在Eclipse中是不能调用的,必须在Linux环境下编译好系统后才能编译此应用程序。 2、

秋风的博客 9389

从零开始编写一个上位机(串口助手)QT Creator + C++

提示:本博客作为学习笔记,有错误的地方希望指正,此文可能会比较长,作为学习笔记的积累,希望对来着有帮助。   绪论:笔者这里使用的是QTCreator和C++来实现一个简单的串口上位机的开发的简单过程,使用到C++,主要是为了后面使用Python开发上位机打下基础。这里主要分为初识C++的一些基本知识,其次是QT Creator的使用。特别声明感谢【北京迅为】嵌入式学习之QT学习篇的学习视频,这里的学习笔记就是根据视频中的内容实战记录下来的。 文章目录一、C++知识1、初识C++2、C++输入输出控制2.1

believe666的博客 4万+

【WRF-FDDA】观测 Obs nudging 的配置与使用说明(中)

WRF-FDDA

WW、forever的博客 280

(转载整理)程序安装流程及如何实现文件在系统后自动重启(windows)

<br />软件在安装时,到底做了些什么? 大家每天都在用电脑,可能也经常在自己的电脑上安装软件。就算自己没安装过,至少也看到人家安装过软件。在这里,我不是想教你怎么安装软件,而是想向你展示,软件在安装的过程中,到底都做了些什么动作?为什么有些软件要安装,直接拷贝过去却不能用?为什么一些软件安装或卸载之后要重启。下面要讨论的就是这些问题。<br />    首先,我们探讨一下软件安装的共通部分,说共通,就是在不同版本的操作系统上,如WINDOWS98,WIN2K和WINXP等上它们都有共同点的地方。这个文章

supermanwg的专栏 2202

OpenRubrics:自动化评估工具优化LLM对齐效果

在大型语言模型(LLM)应用中,模型输出与人类价值观的对齐是关键挑战。传统人工反馈强化学习(RLHF)依赖大量标注,成本高且一致性差。OpenRubrics作为开源工具,通过结构化准则实现自动化评估,显著提升效率。其核心原理是将主观评价转化为可量化的多维指标,支持动态权重调整,并兼容主流RLHF框架。该工具在降低标注成本的同时,通过Fleiss' Kappa系数等指标保证评估一致性,适用于多语言和医疗等专业领域,为LLM对齐提供了工程化解决方案。

weixin_28730037的博客 357

安装软件总结

目录官网下载安装配置环境为什么要配置环境变量测试 官网下载 网上直接搜官网地址 有的软件下载需要登陆账户(如 jdk、oracle),有的不需要直接下载就行了(eclipse、maven、tomcat、Git等等) 在官网上找下载页面 软件一般分为应用程序和压缩格式(.msi、.zip),当然对于不同操作系统的格式也会不同,一般来说,应用程序的好安装一点 直接下载 安装 配置环境 为什么要配置...

klz 776

ABB机器人刷功能选项全一篇就够——不怕丢失程序和IO配置数据

ABB机器人刷功能选项

m0_66701835的博客 1258

【maven】idea左侧External Libraries里,没有Maven的依赖包 代码飘红

文章目录1.概述M.参考 1.概述 因为内网开发,然后这几天我被隔离了,然后公司搞了一个外网的vpn能连接的云桌面,云桌面也是网络隔离的,因此只能自己拷贝相关的文件到里面。 然后我就拷贝了代码和maven仓库中的一部分,因为本地的20G一次拷贝不完,需要多次拷贝,但是我拷贝了kafka,仍然飘红。具体如下 idea左侧External Libraries里,没有Maven的依赖包 然后整了很久都没搞定,后来我自己新建了一个项目,然后引入发现是不可以的,而且框框里面的飘红。 然后我就想是不是因为缺少依赖

九师兄 4411

安装软件时的安装路径和方法你做对了吗?

一个人如果在安装是每次只选择默认路径的话,那么你的文件夹都应比较混乱。下面我来说说我安装软件的方法, 一,根据不同的软件类型安装到不同的盘 现在我们的电脑为了平衡成本和性能大部分电脑都是混合硬盘,即机械硬盘(价格实惠,但是读取速度较慢)和固态硬盘(价格比较高,且寿命相对较短但是读取速较快时机械硬盘速度的三倍左右)所以我们可以将比较耗性能的软件(像游戏等软件)放在固态硬盘中一般就是windows的c...

weixin_44023858的博客 3968

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Mac安装软件时提示已损坏的解决方法

开篇语 第一次在简书写文章就献给了技术相关,想想内心还是非常激动的,谁让DaKunn儿时梦想就是来中关村组装电脑呢(长大了才知道这行学名叫IT)。 着手准备这个文集已经有段日子了,平时在公司经常帮同事解决电脑软硬件问题,DaKunn发现对于设计师而言,技术方面是最大短板,遇到软件装不上、文件打不开等问题,会大大影响工作效率。因此决定开通这个专栏,帮助设计师自己搞定常见的电脑问题,拒绝做技术...

pyzhizhuren的博客 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

做网站的IIS再winxp不用安装

做网站的IIS再winxp不用安装吗,如果需要,应怎样安装呢?

忘记了 691

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

关闭Linux(虚拟机)的软件安装限制

1.我们安装软件或者插件时,操作系统对未知软件(插件)的安装可能会拒绝警告,如果需要禁用我们需要去config这个文件下更改 vi /etc/selinux/config 打开后可以啊看到以下内容,文件内已经告诉我们可以选择选项 # This file controls the state of SELinux on the system. # 此文件控制系统上SELinux的状态。 # SELINUX= can take one of these three values: #

qq_46992574的博客 1197

安路FPGA入门笔记1 软件安装工程创建

安路FPGA EF2L45BG256 工程创建 工程文件路径不能有特殊字符

qq_36766255的博客 1241

redhat6.4安装oracle11G-软件安装前环境准备

7.设置密码 redhat. —> Use any—>use all space—>write chanes to disk。oracle 安装内核必须高于Linux version 2.6.32-71.el6.x86_64 or later。点击解压出来的文件vmware-tools-distrib 右键open in terminal。6、磁盘空间检查,临时空间必须大于1G,软件空间必须大于2G,查看系统内核需求。Kdump: 取消勾选 (是一个内核崩溃保护分析机制)Updates: 下一步。

weixin_44048054的博客 812

linuxOPS系统服务_Linux下软件的安装方式之源码安装

① 基于RPM进行安装(先下载软件然后本地进行安装)② 基于YUM进行安装(在线下载然后安装)

JiuMeilove的博客 2万+

如何查看yum 安装的软件路径&安装时将软件安装到指定路径

如何查看yum 安装的软件路径 https://blog.youkuaiyun.com/wd2014610/article/details/79659073 2018年03月22日 20:05:24熊本同学阅读数 20627 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/wd2014610/article/details/79659073 ...

小崔的专栏 1万+

调用系统安装软件时出现“解析软件包时出现问题”

“解析软件包时出现问题” 调用系统安装软件

知识在这里流传 ------- boolean 1万+

Jenkins插件安装失败时这么做就搞定啦

1.网络或墙的问题导致插件下载安装失败这种错误提示很明显,就是无法连接到插件下载地址,导致插件下载失败。

2301_78843735的博客 1365

安装ubuntu安装软件时,aliyun镜像

新安装ubuntu安装软件时,下载速度慢解决方法 一种情况就是你的网络本身速度就比较慢导致的;另一种情况,就是你的系统选择的源,由于你选择的源可能在国外或者即使在国内也因为各种情况导致与你的连接速度会比较慢。 1、打开 系统设置。 选择 软件和更新 2、打开软件和更新窗口。 3、这里面的每个选项,我们会在后续的分享中慢慢跟大家道来。今天我们主机介绍软...

lq497028254的博客 1684

MacBook安装软件时允许任何来源的软件

MacBook安装软件时允许任何来源的软件 临时设置允许未知来源的app 当下载网上的软件并安装时,会安装失败, 因为MacOS默认只允许安装App Store上的软件 这时可以临时允许安装,如下设置 开启设置—->安全性与隐私—->未知来源的app 这种方式比较安全 设置允许任何来源 系统偏好设置 --> 安全性与隐私 --> 通用 --> 选择"任何来源" "通用"里有时没有"任何来源"这个选项:因为macOS 10.12以上默认为不显示 终端执行 显示"任何来源"选项

yinjl123456的博客 3395
上一篇: cookie与session区别
下一篇: AppData文件夹里的子文件夹Roaming和locallow的内容;Roaming和Local的区别
vectorX
博客等级 码龄11年 37粉丝 21原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值