Сведения о вопросе

Drake

18:05, 12th August, 2020

Теги

.net   windows   registry    

Windows: список и запуск приложений, связанных с расширением

Просмотров: 428   Ответов: 5

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

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



  Сведения об ответе

appple

21:12, 28th August, 2020

Пример кода:

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);
                }
            }
        }
    }
}


  Сведения об ответе

baggs

23:27, 28th August, 2020

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


  Сведения об ответе

pumpa

05:18, 15th August, 2020

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

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


  Сведения об ответе

prince

18:13, 6th August, 2020

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

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

EXT \UserChoice ключ для значения "Always use the selected program to open this kind of file" ('Progid' string value)

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


  Сведения об ответе

pumpa

21:45, 4th August, 2020

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться