文件关联的最佳做法

以下列表是使用文件关联时应使用的推荐最佳做法。

不要从注册表复制文件关联

建议不要从注册表复制现有的文件关联。 这通常会导致传播格式不佳的文件关联。 相反,应按照 文件关联示例方案中概述的步骤进行操作。

尽可能避免Hard-Coding路径进入注册表

正如将路径硬编码为程序可能会导致问题一样,将路径硬编码到注册表也可能导致问题。 相反,应使用注册表扩展字符串 (REG_EXPAND_SZ) 提供路径独立性(如果适用)。 例如,而不是使用此方法:

HKEY_CLASSES_ROOT
   MyVendor.MyProgram.1
      DefaultIcon
         (Default) = C:\WINNT\hta.exe,1

应使用此方法:

HKEY_CLASSES_ROOT
   MyVendor.MyProgram.1
      DefaultIcon
         (Default) = "%SYSTEMROOT%\hta.exe,1"

始终用引号将展开字符串换行

展开字符串在展开时可以包含空格。 由于空格通常被解释为参数分隔符,因此它们在某些情况下会导致问题。 例如,调用 MyProgram 的命令可以存储到注册表中,如下所示:

%SYSTEMROOT%\MyProgram %1 %2

MyProgram 预期 %1 是文件名的完整路径,而 %2 是指示某个操作的开关。 如果此命令使用参数 C:\Program Files\My Documents\document.txt/print 执行,并假定 SYSTEMROOT 为 C:\WINNT,则扩展为:

C:\WINNT\MyProgram C:\Program Files\My Documents\document.txt /print

在这种情况下,MyProgram 解释第一个参数是 C:\Program,第二个参数是 Files\My,这不是预期的行为。 但是,如果展开字符串用引号包装,则无论它们是否包含空格,都正确解释这些参数,如下所示:

"%SYSTEMROOT%\MyProgram" "%1" "%2"

不要将自动播放/自动运行与文件关联混淆

在某些方面,文件关联类似于自动播放/自动运行。 但是,自动播放/自动运行提供独立于文件关联提供的不同功能。 有关详细信息,请参阅 创建已启用 AutoRun 的 CD-ROM 应用程序

不要将 Internet Explorer MIME 数据库与文件关联混淆

文件关联类似于 Windows Internet Explorer MIME 数据库,文件类型可以 (,并且应) 包含 MIME 类型定义。 但是,Internet Explorer MIME 数据库是分开的,不同于文件关联。

使用格式正确的 ProgID 和版本控制 ProgID

始终使用 版本控制 ProgID,即使只有一个版本的 ProgID 也是如此。 版本控制 ProgID 有助于避免 ProgID 冲突和覆盖。 它们还支持应用程序的不同版本共存。

不要使用短文件扩展名

长文件扩展名具有以下优点:

  • 短扩展的有限长度使它们容易发生 扩展冲突。 使用同一扩展对多个文件类型进行分类时,会发生扩展冲突。 使用长扩展可显著降低发生冲突的可能性。
  • 短文件名往往有些神秘。 长扩展往往更有意义,因为附加信息可以嵌入到扩展中。

有关详细信息,请参阅 文件扩展名

在 IANA MIME 数据库中注册新文件类型

Internet 号码分配机构 (IANA) 保留已注册 MIME 类型的公共数据库。 定义新的公共文件类型时,建议同时为该文件类型定义 MIME 类型,并将此类型注册到 IANA。 注册不收费。

使用 Windows Web 服务注册文件关联

应用程序开发人员可以注册 Windows Web 服务,用户使用该服务查找可针对特定文件类型运行的应用程序。 Windows 文件关联系统载入过程 (KB 929149) 中详细介绍了使用 Web 服务注册的过程。

文件关联示例方案

在 Windows Vista 及更高版本中管理默认应用程序的指南

默认程序

(SPAD) 设置程序访问和计算机默认值