文件关联的最佳做法

建议使用以下列表,在处理文件关联时应使用的最佳做法。

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

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

避免在可能的情况下将路径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 服务注册。 注册 Web 服务的过程详见Windows文件系统载入过程 (KB 929149) 。

文件关联示例方案

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

默认程序

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