Table of Contents:

注册表介绍 

打开方式:regedit
Windows的可配置项比通常的UNIX发行版多了可能有2个数量级(除了有系统服务的参数、内置应用的参数、各种个人偏好设置,还有数量巨大的组策略选项、COM组件注册信息)。如果你考虑到这一点,就会发现用文件来配置Windows几乎不可行
注册表实际上是一个层次型数据库,用来储存系统和应用的海量配置信息
做成数据库可以保证多进程、多线程同时读写不出错
注册表有索引,值又是强类型的,所以性能比用文件快,而且占用资源小。这在Windows早期是很重要的特性
做成数据库还可以支持视图:比如,HKEY_CURRENT_USER,方便应用编程
软件卸载不干净是反安装程序没写好,和注册表无关。同理,反安装程序忘删文件的话,也不能怪文件系统不好

下面简单的将软件分为主程序和依赖库。主程序是这个软件独一无二的程序,而依赖库是可以与其他软件共享的程序,例如C运行库。

Linux:Linux发行版的提供厂商都会维护一个软件仓库(software repository),软件仓库中软件都是经过厂商测试并且已经解决好依赖关系的。在linux下安装软件,其实就是通过厂商提供的包管理工具(debian系的apt-get,redhat系的yum)去和厂商的软件仓库同步。这样,linux的软件世界实际上是一个集中式的体系结构,有一个统一而且负责的维护者。因此,在软件仓库中,软件的主程序和依赖库是可以完全的分开为不同的包(package)的,因为维护良好的依赖关系可以保证自动化得找到并安装所有的依赖库。
下图是在Ubuntu安装gcc

第一个红框内是安装命令,第二个是找到的依赖库(依赖包),第三个是为了安装gcc这个软件实际下载并安装了那些包。

Windows:windows下的软件开发者都是各干各的,没有人去维护什么软件仓库什么依赖关系。如果软件依赖某个 dll 怎么办呢?windows程序员使用了一个很简单的方法,我把主程序和依赖库打包为一个文件整体发布不就行了!!!这样自然也就不会存在什么依赖关系了。
下图是在Program Files下搜索msvcr80.dll这个常见的库文件,我们可以看到windows程序员为了解决依赖问题带来了多少冗余的msvcr(这个其实就是C语言运行库)

所以说,Windows并不是没有依赖关系,只是Windows程序员在发布程序的时候把依赖的库和主程序一块发布给了用户。