Windows: список и запуск приложений, связанных с расширением - PullRequest
14 голосов
/ 24 августа 2008

Как определить приложения, связанные с конкретным расширением (например, .JPG), а затем определить, где находится исполняемый файл этого приложения, чтобы его можно было запустить с помощью вызова System.Diagnostics.Process.Start (.. .).

Я уже умею читать и писать в реестр. Именно компоновка реестра затрудняет стандартное определение того, какие приложения связаны с расширением, какие существуют отображаемые имена и где находятся их исполняемые файлы.

Ответы [ 5 ]

8 голосов
/ 27 мая 2009

Как сказал Андерс - это хорошая идея - использовать COM-интерфейс IQueryAssociations. Вот пример с pinvoke.net

8 голосов
/ 24 августа 2008

Пример кода:

using System;
using Microsoft.Win32;

namespace GetAssociatedApp
{
    class Program
    {
        static void Main(string[] args)
        {
            const string extPathTemplate = @"HKEY_CLASSES_ROOT\{0}";
            const string cmdPathTemplate = @"HKEY_CLASSES_ROOT\{0}\shell\open\command";

            // 1. Find out document type name for .jpeg files
            const string ext = ".jpeg";

            var extPath = string.Format(extPathTemplate, ext);

            var docName = Registry.GetValue(extPath, string.Empty, string.Empty) as string;
            if (!string.IsNullOrEmpty(docName))
            {
                // 2. Find out which command is associated with our extension
                var associatedCmdPath = string.Format(cmdPathTemplate, docName);
                var associatedCmd = 
                    Registry.GetValue(associatedCmdPath, string.Empty, string.Empty) as string;

                if (!string.IsNullOrEmpty(associatedCmd))
                {
                    Console.WriteLine("\"{0}\" command is associated with {1} extension", associatedCmd, ext);
                }
            }
        }
    }
}
4 голосов
/ 29 августа 2008

@ aku: не забудьте HKEY_CLASSES_ROOT \ SystemFileAssociations \

Не уверен, выставлены ли они в .NET, но есть COM-интерфейсы (IQueryAssociations и друзья), которые имеют дело с этим, поэтому вам не нужно копаться в реестре и надеяться, что материал не изменится в следующей версии Windows

1 голос
/ 13 ноября 2010

Также HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts \

. EXT \ OpenWithList ключ для списка "Open width ..." (строковые значения a ',' b ',' c ',' d 'и т. Д. Для выбора)

. EXT \ UserChoice ключ для «Всегда использовать выбранную программу для открытия файла такого типа» (значение строкового значения «Progid»)

Все значения являются ключами, используются так же, как docName в приведенном выше примере.

0 голосов
/ 24 августа 2008

Ассоциации типов файлов хранятся в реестре Windows, поэтому вы можете использовать класс Microsoft.Win32.Registry , чтобы прочитать, какое приложение зарегистрировано для какого формата файла.

Вот две статьи, которые могут быть полезны:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...