Windows Shell:如何将不同的xml文件与不同的应用程序关联

本文关键字:文件 应用程序 关联 xml Shell Windows | 更新日期: 2023-09-27 17:50:05

我有多种具有不同根元素名称和名称空间的xml文件(扩展名为.xml)。我想将每种类型与不同的应用程序关联起来,并使每种类型具有不同的文件图标成为可能。这可以用c# .NET实现吗?

Windows Shell:如何将不同的xml文件与不同的应用程序关联

处理此问题的唯一方法与Visual Studio用于处理.sln文件的方法类似,即Visual Studio版本选择器。这个应用程序与.sln文件和句柄相关联,提供了一个图标和一个最终的进程来处理特定的.sln文件。假设您已经安装了Visual Studio,请查看HKEY_CLASSES_ROOT'VisualStudio.Launcher.sln的注册表,看看它是如何完成的。

所以基本上你需要:

  1. 写一个可以决定如何处理.xml文件的可执行文件
  2. 注册进程为负责处理.xml文件的进程
  3. 在你的可执行文件中放置逻辑,或者在你的可执行文件消耗的配置中,决定在每个文件的基础上做什么。

对于图标,请查看子键ShellEx'IconHandler。您将看到它指向(在安装了Visual Studio 2010的x64机器上)HKEY_CLASSES_ROOT'Wow6432Node'CLSID'{9A2B23E4-2A50-48DB-B3C3-F5EA12947CB8},它在InprocServer32下列出了一个DLL,负责为文件提供图标,在本例中为C:'Program Files (x86)'Common Files'Microsoft Shared'MSEnv'VSFileHandler.dll。您需要实现一个类似的DLL,它共享启动器进程的配置/逻辑,以确定在每个文件的基础上显示哪个图标。

通常的警告:在托管代码中编写shell扩展一直是一个很大的"不",因为shell扩展被加载到任何显示通用文件对话框的进程中。这可能会导致混乱,因为在。net 4.0之前,只能将一个版本的CLR加载到一个进程中,所以在这样做之前必须非常确定。考虑到。net 4.0支持进程内并行,这对你来说可能不是问题。

No。对于Windows, XML文件就是XML文件。操作系统不会查看与它相关的名称空间;这只是一个XML文件。

Windows将文件类型与其扩展名相关联,因此,所有XML文件都是XML文件。您可以自己看到:重命名一个完全不包含XML的普通.txt文件,然后在资源管理器中刷新它的文件夹视图。您将看到图标从文本文件图像变为XML文件图像。

如果没有自定义扩展或中间程序,您就无法做到这一点。

也许一种选择是有一个定制的应用程序来处理XML文件。当生成这个程序时,它使用一个XML标记计算出文件的"类型",并相应地生成正确的进程。这是不可能的,但是,你可以给不同的"类型"不同的图标。