门当户对 – Windows的文件类型与打开程序

Windows 的文件类型与对应打开程序的关联,与 Linux 系统一致,依旧可以遵照三个基本问题展开:

  • 各种文件类型如何描述?
  • 各类应用程序如何描述?
  • 文件类型与读取打开其的应用程序的关联机制如何设计?

文件类型描述

Windows 文件类型遵照的核心标准与 Linux 一致,都是 MIME 规范。

MIME 规范是最初源起于 Internet 的一套文件类型规范,一个新的文件类型想成为正式的 MIME 类型,必须向 IANA 注册,有一套规范的过程、规则和对应的模板。

(定义了 MIME 类型,本质上确定了该文件内部的数据结构)

在 Windows 具体实现中,以文件扩展名作为文件类型的区分。这一点是与 Linux 的巨大不同,Linux 系统不用文件扩展名作为文件类型,所以 Linux 中看到一个文件名,无法直观判断其类型。

应用程序描述

Windows 的应用程序采用 PE 文件结构,以扩展名 exe 形式呈现。

文件类型与应用程序关联机制

Linux 中采用系统中的 .list 文件形式将文件类型与应用程序进行关联。Windows 中,采用注册表中的键值将文件类型与应用程序进行关联。

在 Windows 注册表中,主要由 HKEY_CLASSES_ROOT 根键完成关联机制的建立。

在 Windows 用户图形界面下,每件事、每个文件、每个目录、每个小程序、每个连接、每个驱动都被看做一个对象,每个对象都有确定的属性和它联系。HKCR包含着对象类型和他们属性的列表。

HKCR主要功能包括:

  • 一个对象类型和一个扩展名关联;
  • 一个对象类型和一种图标关联;
  • 一个对象类型和一个命令行动的关联。
  • 定义对象类型相关菜单选项和每一个对象类型属性选项。

1. 在注册表中注册文件类型

在 Windows 中,以文件扩展名作为文件类型区分,任何扩展名的文件(如.abc文件)想在 Windows 系统中使用,首先都是要在注册表中注册该扩展名,让该扩展名在系统中“挂上号”。

具体实现上,在注册表根键 HKEY_CLASSES_ROOT 中,需建立该扩展名(.abc)的子键,代表一个文件类型在系统中的确立。利用该键的默认值项,可以定义该扩展名的文件的类型名称。如 abcfile。此外,还可以在该扩展名的键中,利用 Content Type 值项明确该扩展名对应 MIME 类型,真正建立扩展名与 MIME 类型的联系。
(MIME 类型本质就是对文件内部数据结构的确立,使用 Content Type 值项的命名非常贴切)

pic-1

2.建立文件类型与应用程序的关联

  • 完成基于扩展名的注册后,同样在根键 HKEY_CLASSES_ROOT 下,建立以步骤 1 中扩展名子键中默认值项中定义文件类型名称(abcfile)的命名的子键,并在该子键下逐级创建子键 shell、open、command。

  • 在 command 子键的默认值项中,填入该文件类型的打开程序路径。

pic-2

.abc 文件的打开程序关联

pic-3

.doc 文件的打开程序关联

如此,即可在 Windows 中建立一个特定扩展名文件与其对应打开程序的之间的关联。当双击扩展名文件时,注册表中即可找到对应应用程序予以打开。

reference:

  1. https://blog.csdn.net/u012562943/article/details/77503299
  2. File Association Example(Microsoft Document)

发表评论

电子邮件地址不会被公开。 必填项已用*标注