当选择“打开方式...”选项时,操作系统如何知道如何处理文件?

时间:2009-06-16 15:32:00

标签: windows file operating-system

说明: 我不记得Linux和我不了解OS X,但在Windows中你可以右键单击一个文件并选择一个程序来打开它。但操作系统如何知道如何使程序打开呢?它是否跟踪程序的“打开文件”对话框?开发人员是否必须为这些情况指定特殊的事件处理程序或其他东西?

6 个答案:

答案 0 :(得分:3)

对于Windows,答案在注册表中。如果您习惯阅读注册表,请在Windows计算机上运行regedit.exe。

在HKEY_CLASSES_ROOT下,您将看到所有文件类型的密钥列表,.doc,.txt等。这些密钥中的每一个都包含一个名为“OpenWithList”或“OpenWithProgIds”的密钥。应用程序可能有一个注册的“ProgId”,也可以在HKEY_CLASSES_ROOT下找到,它可以将它的ProgId注册到它想要在OpenWithProgIds中处理的文件类型。否则它会在OpenWithList中注册自己。

回应对第一个答案的评论(因为我没有足够的代表评论):

您正在考虑使用DDE,这是一种近乎被弃用的技​​术。 Windows shell使用所选文件作为第一个参数执行应用程序。

答案 1 :(得分:1)

Windows资源管理器会根据以下键中的文件扩展名记住您之前的“打开方式...”选项:

HKCR\.ext\OpenWithList

下次右键单击该文件时,它会查看该文件,并构建一个以前用于打开特定文件类型的程序列表。

说它找到一个名为“myapp.exe”的密钥。然后它在这里查找应用程序:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\myapp.exe

获取安装应用程序的信息。它就在这里:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\myapp.exe

跟随存储在那里的GUID,找出应用程序的显示名称。

为了增加乐趣,主要关联的应用程序也在列表中,也包括OpenWithProgIds键中的所有内容以及所有内容:

HKEY_CLASSES_ROOT\*\OpenWithList

以及各自的HKEY_CURRENT_USER对应方。

然后,生成的应用程序列表将变为唯一,排序和显示。在选择时,文件的启动方式与您点击的任何其他文件一样 - 即:

C:\path\to\myapp.exe "C:\path\to\the\file.ext"

答案 2 :(得分:0)

答案 3 :(得分:0)

文件关联存储在注册表中:HKEY_CLASSES_ROOT。

您可以使用Windows资源管理器以图形方式管理它们:(WinXP)

单击工具/选项/文件类型

或使用“控制面板”中的“默认程序”小程序。 (Vista)的

答案 4 :(得分:0)

只是为了一些怀旧,相当辉煌的Acorn archimedes有一个更好的系统,每个文件类型都有一个唯一的类型号,带有制造商和应用程序代码(更像是MAC地址),这是用文件写的。
这意味着您可以使用正确的应用程序打开所有名为.bak的不同文件 - 与Windows安装的应用程序窃取该类型的每个现有文件的所有权的情况不同。 Autocad特别不好,注册了大约20种文件类型。

答案 5 :(得分:-1)

操作系统运行指定的程序作为参数发送要打开的文件的路径。

例如,在C#中,如果您想知道操作系统希望您打开哪个文件,则需要执行以下操作:

class Program
{
    static void Main(string[] args)
    {
        if (args.Length == 1) //The OS wants me to open a file
            openSomeFileJustBecauseTheOSWantsIt(args[0]);
    }
}