淘客熙熙

主题:windows操作系统下,为什么要产生大量垃圾? -- 杜撰

共:💬18 🌺26 新:
全看树展主题 · 分页 下页
家园 windows操作系统下,为什么要产生大量垃圾?

这里想必高手不少,有个问题一直想问,为什么windows下的应用软件,卸载以后都要留下点垃圾?

既然安装的时候,能把组件一个不少的都装到硬盘上,为什么在unistall的时候,就不能把自己家的人都带走呢?

有给windows写程序的朋友吗,说是吧,你们在写uninstall的时候,是怎么想的?

家园 很多可能是在用的时候产生的

是用户数据还是垃圾不敢肯定啊,如大家用的MS Word,万一用户将输入文档存在安装后的目录中,删除Word时哪敢一起删除啊,碰上几个“刁民”还不赔个七荤八素。所以Uninstall只能删除自己明白的,不明白的能不删就不删。反正现在硬盘也不值几个钱,留在硬盘上还有广告效应呢,hehe

家园 不完全是这样。

1、原来的安装目录。好多应用软件在uninstall以后,该目录下的大部分文件会被删除,但是该目录会留下,以及里面的一些dat,ini等文件。

2、用户目录/application data。该目录一般处于隐藏状态,但是该目录下存在大量应用软件的组件,一般uninstall后,这些东西会留下,成为垃圾。

3、windows/system2。安装应用程序时,好像会有好多dll文件塞进该目录,鉴于uninstall在以上1,2中的表现,有充分理由怀疑在这个目录下不会不留垃圾。

4、注册表。在uninstall某个应用程序以后,如果你试着用该程序的名字,或开发开程序的公司名字作keyword搜索一下,会发现残留的大量垃圾。

还有好多,就不一一细表了。反正俺对这种行为很不解。

家园 这个问题要分开来看

首先,你看到的一些在application data或者安装目录下的dat/ini文件,可能是用户在使用软件中的一些设置或者个人习惯。在卸载时不删除这些文件,一般是为了下次安装(例如说升级或者坏了重装)之后,能直接使用这些设置,方便用户。

其次,在system/system32下的dll,一般是供系统使用或者其他程序调用的,也是不可以随便删的。例如说,如果我有个软件A,依赖于一个aa.dll,那么我会在安装我这个软件的时候,检查系统有没有这个版本的aa.dll,如果没有的话,那么复制一个过去。如果也有一个软件B,也同时依赖这个aa.dll。那么如果我在卸载A的时候,删除了这个aa.dll,那么之后软件B就不能够正常运行了。而且,我在卸载软件A的时候,无法预知有没有另外的一个软件B/C/D...也是依赖这个aa.dll的,所以,这么删,是很危险的。

再次,关于注册表的垃圾,来源基本上就是我说的这两种:配置信息,和一些公共控件(ocx或者com之类)的注册信息。卸载时不删除它们的原因大致上也和上面说的差不多。

最后,说一下关于系统垃圾的问题。其实这个问题是很多现代操作系统所很难避免的,原因无非是现在的软件功能越来越多,配置越来越复杂,程序之间的依赖和耦合也越来越多。所以,卸载的时候,一不小心,就容易造成大面积的破坏。当然,这些在专业人士看来,往往就是一个两个小地方没弄好,但是在普通用户看起来,就是非常严重的问题,甚至会影响他们对这个软件的评价。所以,很多软件在设计时抱着安全第一,稳定第一的方针,保守处理,也是无可厚非的。

而且,对于Windows来说,由于系统的封闭性,有些时候,即使发现了这些垃圾,但是因为信息没有完全公开或者其他原因,也不敢随便乱动。例如说注册表里的绝大多数项,我相信即使是专门做Windows应用程序开发的很多程序员,也不敢说自己知道那些项是干什么的,怎么手工修改删除的。而对于Linux/Unix来说,因为系统的开放性,所以,一但发现类似的情况,可以比较方便的判定某些文件或者信息是不是真正的垃圾信息,然后加以删除或者进行其他操作。不过有一点是肯定的:要让应用程序本身自动的完成这个步骤,基本上是不可能的。

家园 要明白uninstall 是干啥的

在安装的时候会有一个记录。记载着放进去的文件

uninstall就是把这些记录的干掉,至于以后生成的不归uninstall管。

家园 乱弹123

这个问题详细谈,估计要有安装工具的使用开发经验,比如InstallShield.

1.使用安装工具和写程序一样,有好的程序,也有很烂的程序。但是对一个相当复杂的程序,完全的Uninstall是Mission Impossible。

2.安装工具在其生成的MSI文件中保留安装文件和注册表的信息,Uninstall基本上是对照这个文件删除文件和注册表的信息。所谓的Uninstall主要是针对管理员安装时对PROGRAM FILES,Windows,SYSTEM32等系统目录的安装。用户目录中的“反安装”不在考虑之列,这个地方的设计是不求有功,但求无过。

3.一个复杂的安装设计通常要涉及第三方的安装,比如.NET,某个驱动程序。当然可以完全自己来,但是的但是,现在有这样的“傻人”吗?

4.烂的安装设计容易遗留垃圾。比如某个COM服务器的安装需要写入很多注册表的信息,应该由安装工具从这个COM服务器程序中直接导入这些注册表的信息,用安装引擎写入。但是一个“偷懒”的办法就是安装完成后运行一个外部命令注册服务器。安装是绝对没有问题,但反安装???...

5.木马和病毒只有安装没有反安装。

家园 谢谢下面3位朋友的解答。

我现在每次uninstall一个program以后,都要手动删除:

1、C:\Program Files\program name

2、C:\Documents and Settings\username\Application Data\program name

3、C:\Documents and Settings\username\Local Settings\Application Data\program name

4、C:\Windows\Common Files\Program name

5、在注册表里用该program的name或开发该软件的公司名做关键词进行搜索,肯定搜出一大串没用的键值。

我不是programmer,知道的也就是这几个地方,其他地方不敢乱动。再定期用windows优化大师或超级兔子清理一下。

自我感觉这是不是就是所谓的“洁癖”?

家园 非常专业,花!
家园 换Ubuntu吧,省心,放心,安心。

Windows这些东西是胎里带出来的。

有时候太流行也有麻烦。

家园 是洁癖

而且是毫无必要的洁癖

家园 俺编过windows下的程序。

  现在编程需要自己干的不多,多数界面什么的都是编程软件给你做好了,所以编译后你也不知道里面塞了些什么。

  同时做成安装程序也有专门的软件,也不知道会给你安装进去些什么,唯一知道的是安装进去的东西比你编的部分大得多。

家园 在当初.net framwework

的设计文档里面,MSDN专门对dll hall问题做出一个MS的解决方案,我记得是引用计数归0就删除了。

家园 我也有这个习惯

注册表的垃圾多了确实影响系统速度。

家园 汗,那是 RAD 编程,用那个开发……

专业一点的程序员还是很少用的,特别是计算机专业的。现在不少程序员开发都用 Linux 平台,也不是很常用 RAD 。我见的都是搞 UI 的人在用,要都用 RAD 开发,代码质量估计都没法保障,文档那更是一踏糊涂。

家园 不太同意你的观点

开发工具只是用来帮助程序员实现业务逻辑的,RAD可以帮助程序员从技术细节中解放出来,轮子为什么要一次次的重新造呢?

我见的都是搞 UI 的人在用,要都用 RAD 开发,代码质量估计都没法保障
这个只能说明他们的PM和项目管理很弱。战略目标不明确,就算是计算机天才也是白搭。

windows下的VS就可以很好的做底层开发,而Linux我用的少,估计KDevelop不好用是编译速度慢或help系统很弱智?

全看树展主题 · 分页 下页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河