Jak uruchomić pliki w C #

-Edit- Czuję się jak idiota. Miałem przeczucie, że taka odpowiedź poniżej zadziała, ale nie widziałem żadnych wyników Google podobnych do odpowiedzi poniżej. Więc kiedy zobaczyłem ten złożony kod, pomyślałem, że tak musi być.

Szukałem i znalazłem toWindows: Lista i uruchamianie aplikacji powiązanych z rozszerzeniem jednak nie odpowiedział na moje pytanie. Z ulepszeniami poniżej wymyśliłem poniżej. Jednak utknie w plikach obrazów. Pliki Txt działają prawidłowo

Wkrótce zaktualizuję ten kod, aby uwzględnić ścieżki aplikacji ze spacjami, ale nie rozumiem, dlaczego pliki obrazów nie uruchamiają się.

static void launchFile(string fn)
{
    //majority was taken from
    //https://stackoverflow.com/questions/24954/windows-list-and-launch-applications-associated-with-an-extension
    const string extPathTemplate = @"HKEY_CLASSES_ROOT\{0}";
    const string cmdPathTemplate = @"HKEY_CLASSES_ROOT\{0}\shell\open\command";

    string ext = Path.GetExtension(fn);

    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);
            var p = new Process();
            p.StartInfo.FileName = associatedCmd.Split(' ')[0];
            string s2 = associatedCmd.Substring(p.StartInfo.FileName.Length + 1);
            s2 = s2.Replace("%1", string.Format("\"{0}\"", fn));
            p.StartInfo.Arguments = s2;//string.Format("\"{0}\"", fn);
            p.Start();
        }
    }
}

questionAnswers(3)

yourAnswerToTheQuestion