Подтвердить что ты не робот

Как запустить файлы в С#

-Edit- Я чувствую себя идиотом. У меня было ощущение, что ответ, подобный ниже, будет работать, но не видел никаких результатов в Google, подобных приведенным ниже ответам. Поэтому, когда я увидел этот сложный код, я подумал, что это должно быть так.

Я искал и нашел это Windows: список и запуск приложений, связанных с расширением, однако он не ответил на мой вопрос. С настройками ниже я придумал ниже. Однако он застревает в файлах изображений. Файлы Txt работают нормально

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

static void launchFile(string fn)
{
    //majority was taken from
    ///info/266878/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();
        }
    }
}
4b9b3361

Ответ 1

Использование:

System.Diagnostics.Process.Start(filePath);

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

Ответ 2

Похоже, вы смотрите больше на это:

System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "<whatever>";
proc.Start();

Ответ 3

Предполагая, что вы просто хотите запускать файлы, которые уже имеют некоторые связанные приложения (например: *.txt связано с блокнотом), Используйте System.Diagnostics.Process.

например.

 using System.Diagnostics;
    Process p = new Process();
    ProcessStartInfo pi = new ProcessStartInfo();
    pi.UseShellExecute = true;
    pi.FileName = @"MY_FILE_WITH_FULL_PATH.jpg";
    p.StartInfo = pi;

    try
    {
        p.Start();
    }
    catch (Exception Ex)
    {
        //MessageBox.Show(Ex.Message);
    }

Примечание. На моем ПК открывается pic в Windows Picture и Fax Viewer, поскольку это приложение по умолчанию для файлов *.jpg.