添加删除程序是怎么知道软件的大小的?

添加删除程序是怎么知道软件的大小的?

作者:BlogUpdater |  时间:2021-06-25 |  浏览:1671 |  评论已关闭 条评论

有时候,咱还得靠猜
如果一个程序自身不能报告它的大小和其他信息,添加删除程序只能靠猜测了。

问题在于,添加和删除程序没有一种很明确的方法来将软件列表中的条目和实际的程序对应起来。
在软件列表中的每一个条目,都来自于以下注册表:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall

这个注册表的唯一必须提供的属性是:软件的显示名称和卸载程序的路径。关于此软件的其他信息都是可选的,也就是说:软件的开发者可以不用填写。

让我们看一个例子
假设添加和删除程序加载如下图所示的软件注册表信息:

为了获取最近使用的日期和使用频率等信息,添加删除程序需要知道软件的执行程序的名称,这样它就可以向开始菜单查询:”用户使用这款软件的频率如何?用户上一次使用这款软件是什么时候?”

请注意,在上面的注册表信息中,没有软件的执行文件的信息。

所以,添加删除程序只能猜测了。它会遍历开始菜单中的所有程序,然后对别它们的名称和注册表中国的显示名称。它会查找与显示名称中的词匹配至少两个词的开始菜单项。

举个例子,如果开始菜单中有一个程序叫做:”Pretty Decent Windows Program”,则这将算作两个单词的匹配(“Windows”和”Program”)。

然后,它会取匹配最多的那个单词并做出决定:”好吧,应该就是它了。”

假设最佳匹配确实是”Pretty Decent Windows Program.lnk”,它是“C:\Program Files\LitWare\Decent Program\Decent.exe”的快捷方式。 添加删除程序将决定”Awesome Program for Windows”应该获得”Pretty Decent Windows Program.lnk”的图标,即”C:\Program Files\LitWare\Decent Program\Decent.exe”的使用频率和最近使用的信息将显示为”Awesome Program for Windows”。

但是等等,还有其他需要考虑的地方。我们还需要程序大小。添加删除程序在你的”Program Files”目录中查找名称与显示名称匹配至少两个单词的目录。假定最佳匹配是安装程序文件的目录。 这些大小相加并报告为”Awesome Program for Windows”的大小。

程序可以向注册表中添加一些额外的信息来避免上面说的猜测。它可以设置EstimatedSize属性以避免让添加删除程序猜测程序有多大。它还可以设置DisplayIcon属性来指定要为列表中的程序显示哪个图标。

但是,如果一个程序忽略了所有这些提示,那么由于巧合的单词匹配,添加删除程序最终做出的猜测通常会错得离谱。根据我的经验,由于该语言大量使用介词和冠词(导致大量错误匹配),西班牙语在这种算法中的表现尤为严重。

是的,我知道,这些所谓的猜测都是不那么靠谱的,但是当你在信息不足的情况下不得不给出结果的时候,猜测是你所能做的最好的选择。

最后请注意:只有在程序本身无法提供信息时操作系统才会做上面的猜测,很多人看到这篇文章后很容易忽略这个细节。

总结
是不是可以顶层设计的时候,就考虑到开发者可能不会那么”守规矩”呢?

最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《How does Add/Remove Programs get the size and other information?》

最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

标签:

评论已关闭。