文件类型

本主题介绍如何创建新文件类型以及如何将应用与文件类型和其他定义良好的文件类型相关联。 具有共享通用文件扩展名(.doc、.html等)的文件具有相同 类型。 例如,如果创建新的文本编辑器,则可以使用现有的 .txt 文件类型。 在其他情况下,可能需要创建新的文件类型。

本主题按如下所示进行组织:

有关以下主题的其他信息:

公共和专用文件类型

公共文件类型也称为常用或有争议的类型,因为竞争应用程序可能希望与这些文件类型相关联。 公共文件类型的特征包括:

  • 它们通常由标准机构定义,并且/或由其将组织定义为交换格式进行推广。
  • 它们通常以不同的目的在计算机和用户之间交换。
  • 需要在许多不同的平台上支持它们。
  • 来自多个供应商的应用程序可能会处理它们。

被视为公共的文件类型的一些示例包括图像文件类型 .png、.gif、.jpg和 .bmp,以及音频类型.wav、.mp3和 .au。

与公共文件类型不同,专用或专有文件类型通常具有一种仅由一个应用程序或供应商实现和理解的格式。 因此,专用文件类型通常不容易在应用程序之间发生冲突。 某些文件类型可以作为专用文件类型启动,但后来成为公共文件类型。

注意

Windows 不区分公共和专用文件类型。 区别仅在决定选择文件类型注册时相关。

 

注册文件类型

若要将文件类型与现有应用程序相关联,请在注册表中找到应用程序 ProgID。 若要将文件类型与新应用程序相关联,请为应用程序定义 ProgID。 有关定义新 ProgID 的信息,请参阅 编程标识符

文件扩展名子项采用以下常规形式:扩展名=ProgID。 文件扩展名子项存储在 HKEY_CLASSES_ROOT 子树中。

在注册表中创建文件类型子项时,必须包括前导期(.)。 例如,如果希望具有短扩展名 .myp 和长扩展名 .myp-file 的文件类型使用名为 MyProgram 的应用程序打开,请使用以下语法:

HKEY_CLASSES_ROOT
   .myp
      (Default) = ApplicationVendor.MyProgram
   .myp-file
      (Default) = ApplicationVendor.MyProgram
   ApplicationVendor.MyProgram
      (Default) = MyProgram Application

如前面的示例中所示,如果还注册了短文件扩展名 (.myp),则还应为长扩展名 (.myp-file) 创建子项。 有关详细信息,请参阅 文件类型处理程序

设置可选子项和文件类型扩展属性

注册表中的文件类型扩展项具有多个可选子项和属性。

下表描述了由文件关联使用的文件类型扩展名条目。 所有值都属于 REG_SZ 类型。

注册表项 行动
违约 将扩展子项的默认值设置为链接到它的 ProgID。
内容类型 将内容类型值设置为文件类型的 MIME 内容类型。
OpenWithList 请勿使用。 此子项包含一个或多个应用程序子项,这些应用程序显示在 Open 中,文件类型为 对话框条目,仅适用于 Windows XP 之前的作系统上的 .exe 应用程序。 请改用 OpenWithProgIds。
OpenWithProgIds 此子项包含此文件类型的备用 ProgID 列表。 这些 ProgID 的程序显示在 “打开”菜单中,并可用作文件类型的默认 Windows 应用商店应用。 每当应用程序通过更改默认值来接管此文件类型时,它也应该向此列表添加一个条目。
PerceivedType 将 PerceivedType 值设置为文件所属的 PerceivedType(如果有)。 Windows Vista 之前的 Windows 版本不使用此字符串。 有关详细信息,请参阅 感知类型和应用程序注册

 

文件扩展名子项的一般形式如下所示。 所有条目类型都是 REG_SZ 类型。

HKEY_CLASSES_ROOT
   .ext
      (Default) = ProgID.ext.1
      Content Type = MIME content type
      PerceivedType = PerceivedType
      OpenWithProgids
         ProgID2.ext.1
         ProgID3.ext.1
      ProgID.ext.1
         shellnew

有关文件类型的重要注意事项包括:

  • HKEY_CLASSES_ROOT 子树是通过合并 HKEY_CURRENT_USER\软件\HKEY_LOCAL_MACHINE\软件\ 构成的视图

  • 一般情况下,HKEY_CLASSES_ROOT 旨在从中读取但不写入。 有关详细信息,请参阅 HKEY_CLASSES_ROOT 文章。

  • 若要在特定的计算机上全局注册文件类型,请在 HKEY_LOCAL_MACHINE\Software\ 子项中创建文件类型条目。

  • 若要使文件类型注册仅对当前用户可见,请在 HKEY_CURRENT_USER\Software\ 子项中创建文件类型条目。

  • 应用程序可以提供自己的谓词实现,如打开或播放,如以下注册表示例所示。

    HKEY_CLASSES_ROOT
       Applications
          ApplicationName.exe
             shell
                verb
    

    谓词子项的子项包括命令行和放置目标方法:命令DropTarget

  • 创建或更改文件关联时,请务必通知系统已进行更改。 为此,请调用 SHChangeNotify 并指定 SHCNE_ASSOCCHANGED 事件。 如果未调用 SHChangeNotify,则在重新启动系统之前,可能无法识别更改。

  • 若要检索有关文件关联的注册表信息,请使用 IQueryAssociations 接口。 有关演示此过程的方案,请参阅 文件关联示例方案

注意

应用路径应用程序 注册表子项用于代表应用程序注册和控制系统的行为。 有关此功能的详细信息,请参阅 应用程序注册

 

卸载期间删除注册表信息

卸载应用程序时,应删除与该应用程序关联的 ProgID 和其他大多数注册表信息,作为卸载的一部分。 但是,已获取文件类型所有权的应用程序(通过将文件类型的默认值 HKEY_CLASSES_ROOT\.extension 子项设置为应用程序的 ProgID)不应尝试在卸载时删除该值。 保留默认值的数据可避免确定另一个应用程序是否拥有文件类型的所有权,并在安装原始应用程序后覆盖默认值。 仅当发现 ProgID 存在已注册的 ProgID 时,Windows 才遵循默认值。 如果取消注册 ProgID,则忽略它。

请注意,其他文件类型所有权信息存储在 HKEY_CURRENT_USER 子树中,并且仅在注册引用它的应用程序时才使用。 因此,卸载应用程序时不需要删除此数据。

例如,下面显示了卸载应用程序之前注册表的状态:

HKEY_CLASSES_ROOT
   .mp3
      (Default) = YourProgID
   YourProgID
      shell
         open
            command
               (Default) = yourapp.exe %1

下面显示了卸载应用程序后这些相同注册表项的状态。

HKEY_CLASSES_ROOT
   .mp3
      (Default) = YourProgID
   YourProgID subkey removed

支持打开元数据的文件类型

在 Windows 7 及更高版本中,以下文件类型支持打开元数据。

文件类型 文件扩展名
Office 2007 文档 .docx、.xlsx、.pptx
Office 97-2003 文档 .doc、.xls、.ppt
保存的搜索 .search-ms
基于 Windows 媒体的格式 (高级流格式 (ASF) 容器) .wmv,.wma
MP4 (属性处理程序) .mp4、.m4a、.m4v、.mp4v、.m4p、.m4b、.3gp、.3gpp、.3gp2、.mov

 

应用程序注册

文件关联的工作原理

按文件类型或类型 内容视图

文件类型验证程序

文件类型处理程序

编程标识符

感知类型

关联数组