文件类型

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

本主题的组织方式如下:

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

公共和专用文件类型

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

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

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

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

注意

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

 

注册文件类型

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

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

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

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 请勿使用。 此子项包含一个或多个应用程序子项,适用于显示在文件类型的 “打开方式 ”对话框条目中的应用程序,仅适用于 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\软件\ ”子项中为文件类型创建一个条目。

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

  • 应用程序可以提供自己的谓词实现,例如 open 或 play,如以下注册表示例中所示。

    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

 

应用程序注册

文件关联的工作原理

按文件类型或类型显示的内容视图

文件类型验证程序

文件类型处理程序

编程标识符

感知类型

关联数组