Windows: lista i uruchamianie aplikacji powiązanych z rozszerzeniem

Jak określić aplikacje związane z danym rozszerzeniem (np.JPG), a następnie określić, gdzie znajduje się plik wykonywalny tej aplikacji, aby można go uruchomić za pomocą wywołania say System.Diagnostyka.Proces.Start(...).

Już wiem jak czytać i pisać do rejestru. To jest układ rejestru, który sprawia, że trudniej określić w standardowy sposób, jakie aplikacje są związane z rozszerzeniem, jakie są nazwy wyświetlane i gdzie ich pliki wykonywalne znajdują się.

Author: Pauly, 0000-00-00

5 answers

Przykładowy kod:

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);
                }
            }
        }
    }
}
 8
Author: aku,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-24 11:01:18

Jak powiedział Anders-dobrym pomysłem jest użycie interfejsu IQUERYASSOCIATIONS COM. Oto próbka z pinvoke.net

 8
Author: Barakando,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-27 19:42:01

@aku: nie zapomnij HKEY_CLASSES_ROOT\SystemFileAssociations\

Nie wiem, czy są one wystawione w. NET, ale są interfejsy COM (Iqueryassocjations i friends), które radzą sobie z tym, więc nie musisz grzebać w rejestrze i mieć nadzieję, że coś się nie zmieni w następnej wersji windows

 4
Author: Anders,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-28 20:49:35

Also HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion\Explorer \ FileExts\

. EXT \openwithlist klucz dla " Open width..."list ('A', 'b', 'c', 'd' itd. wartości łańcuchowe dla wyborów)

.EXT \Klucz UserChoice dla "Zawsze używaj wybranego programu, aby otworzyć tego rodzaju plik "('Progid" string value value)

Wszystkie wartości są kluczami, używanymi tak samo jak docName w powyższym przykładzie.

 1
Author: user362515,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-13 18:49:06

Skojarzenia typów plików są przechowywane w rejestrze systemu Windows, więc powinieneś być w stanie korzystać z Microsoft.Win32.Klasa rejestru do odczytu, która aplikacja jest zarejestrowana dla jakiego formatu pliku.

Oto dwa artykuły, które mogą być pomocne:

 0
Author: Erik Öjebo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-24 10:19:58