有多种方法可以确定处理具有特定文件扩展名的文件的应用程序。 OpenWithList 和 OpenWithProgids 谓词是在文件扩展名的注册表项下指定文件处理程序的两种方法。
OpenWithList 谓词
在 Windows 资源管理器中右键单击某个文件时,会看到打开命令。 如果多个产品与扩展相关联,则会看到一个打开方式子菜单。
通过在 HKEY_CLASSES_ROOT 中为文件扩展名设置 OpenWithList 键,可以注册不同的应用程序以打开扩展名。 在此键下列出的文件扩展名应用程序显示在打开方式对话框的推荐程序标题下。 以下示例显示了为打开 .vcproj 文件扩展名而注册的应用程序。
HKEY_CLASSES_ROOT\
.vcproj\
(default)="VisualStudio.vcproj.14.0"
OpenWithList\
devenv.exe
注意
指定应用程序的键来自 HKEY_CLASSES_ROOT\Applications 下的列表中。
通过添加 OpenWithList 键,可以声明应用程序支持文件扩展名,即使另一个应用程序拥有该扩展的所有权也是如此。 这可能是应用程序的未来版本,也可能是另一个应用程序。
OpenWithProgIDs
编程标识符 (ProgIDs) 是 ClassID 的友好版本,用于标识应用程序或 COM 对象的版本。 每个可共同创建的对象都应该有自己的 ProgID。 例如,VisualStudio.DTE.7.1 启动 Visual Studio .NET 2003,而 VisualStudio.DTE.10.0 启动 Visual Studio。 作为项目类型或项目项类型的所有者,必须为文件扩展名创建特定于版本的 ProgID。 这些 ProgID 可能是冗余的,因为不止一个 ProgID 可以启动同一应用程序。 有关详细信息,请参阅注册文件扩展名的谓词。
使用以下命名约定来命名版本文件 ProgID,以避免与其他供应商的注册重复:
文件扩展名 | 版本控制 ProgID |
---|---|
.extension | ProductName。 extension.versionMajor.versionMinor |
可以通过将版本控制 ProgID 作为值添加到 HKEY_CLASSES_ROOT\<extension>\OpenWithProgids 键来注册能够打开特定文件扩展名的不同应用程序。 此注册表项包含与文件扩展名关联的备用 ProgID 列表。 与列出的 ProgID 关联的应用程序显示在打开方式产品名称子菜单中。 如果在 OpenWithList
和 OpenWithProgids
两个键中指定了相同的应用程序,则操作系统将合并重复项。
注意
OpenWithProgids
键仅在 Windows XP 中受支持。 由于其他操作系统忽略此键,因此不要将其用作文件处理程序的唯一注册。 使用此键可以在 Windows XP 中提供更好的用户体验。
将所需的 ProgID 添加为 REG_NONE 类型的值。 以下代码提供了为文件扩展名 (.ext) 注册 ProgID 的示例。
HKEY_CLASSES_ROOT\
.ext\
(default)="MyProduct.ext.14.0"
OpenWithProgids
progid REG_NONE (zero-length binary value)
otherprogid REG_NONE (zero-length binary value)
指定为文件扩展名默认值的 ProgID 是默认文件处理程序。 如果修改 Visual Studio 早期版本随附的文件扩展名的 ProgID,或者其他应用程序可以接管该扩展,则必须为文件扩展名注册 OpenWithProgids
键,并在列表中指定新的 ProgID 以及你支持的旧 ProgID。 例如:
HKEY_CLASSES_ROOT\
.vcproj\
(default)="VisualStudio.vcproj.14.0"
OpenWithProgids
vcprojfile //old progid
VisualStudio.vcproj.12.0 //old progid
VisualStudio.vcproj.14.0 //new progid
如果旧 ProgID 具有与之关联的谓词,则这些谓词也会显示在快捷菜单中的打开方式 产品名称下。