Como faço para iniciar arquivos em c #

Eu me sinto um idiota. Eu tinha a sensação de que algo como a resposta abaixo funcionaria, mas não vi nenhum resultado do google semelhante às respostas abaixo. Então, quando vi esse código complexo, achei que tinha que ser assim.

Eu procurei e encontrei issoWindows: Listar e iniciar aplicativos associados a uma extensão no entanto, não respondeu à minha pergunta. Com ajustes abaixo eu vim com o abaixo. No entanto, fica preso em arquivos de imagem. Arquivos Txt rodam bem

Eu atualizarei este código em breve para dar conta dos caminhos de aplicativos com espaços, mas não entendo por que os arquivos de imagem não são iniciados.

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