Как ОС узнает, что делать с файлом, когда выбран параметр “Открыть с помощью ...”?

StackOverflow https://stackoverflow.com/questions/1002270

  •  05-07-2019
  •  | 
  •  

Вопрос

Объяснение:Я не помню о Linux и не знаю об OS X, но в Windows вы можете щелкнуть правой кнопкой мыши файл и выбрать программу, чтобы открыть его.Но откуда операционная система точно знает, как заставить программу открыть его?Отслеживает ли он диалоги "Открыть файл", которые есть в программе?Должен ли разработчик указывать специальный обработчик событий или что-то в этом роде для этих случаев?

Это было полезно?

Решение

Операционная система запускает указанную программу, отправляя в качестве параметра путь к файлу, который нужно открыть.

Например, в C #, если вы хотите узнать, какой файл операционная система хочет, чтобы вы открыли, вам нужно будет выполнить:

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

Другие советы

Для Windows ответ находится в реестре.Если вам удобно читать реестр, запустите regedit.exe на вашем компьютере с Windows.

В разделе HKEY_CLASSES_ROOT вы увидите ключевой список всех типов файлов, .doc, .txt и т.д.Каждый из этих ключей содержит ключ с именем "OpenWithList" или "OpenWithProgids".У приложения может быть зарегистрированный "ProgID", также находящийся в разделе □, и оно может зарегистрировать свой ProgID для типов файлов, которые оно хочет обрабатывать в OpenWithProgids.В противном случае он регистрирует себя в OpenWithList.

В ответ на комментарий к первому ответу (потому что у меня недостаточно репутации, чтобы комментировать):

Вы думаете о DDE, которая является достаточно устаревшей технологией.Оболочка Windows запускает приложение с выбранным файлом в качестве первого параметра.

Проводник 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"

Ассоциации файлов хранятся в реестре в:HKEY_CLASSES_ROOT HKEY_CLASSES_ROOT.

Вы можете управлять ими графически с помощью проводника Windows:(WinXP)

Выберите Инструменты / Параметры/ Типы файлов

Или с помощью апплета "Программы по умолчанию" на панели управления.(Перспектива)

Просто для некоторой ностальгии довольно блестящий Желудь архимеда имел гораздо лучшую систему, где каждый тип файла имел уникальный номер типа, с кодом производителя и приложения (скорее похожий на MAC-адрес), который был записан вместе с файлом.
Это означает, что у вас могут быть разные файлы с именем .bak, открытые правильным приложением - в отличие от случая Windows, когда новое установленное приложение присваивает права собственности на каждый завершающий работу файл этого типа.Autocad особенно плох для этого, регистрируя около 20 типов файлов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top