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

Как открыть файл с помощью обработчика по умолчанию оболочки?

Наш клиент (приложение winforms) включает в себя файловый браузер. Я хочу, чтобы пользователь мог открыть выбранный файл с помощью обработчика по умолчанию оболочки. Как мне это сделать? Я прочитал, что я должен использовать Win32 API, а не реестр, но я бы предпочел решение, которое включает только .NET.

4b9b3361

Ответ 1

EDIT: более новый, более простой ответ.

Вы можете просто использовать Process.Start(filename). Это указано в docs для Process.Start:

Запуск процесса, указав его имя файла похоже на ввод информации в диалоговом окне "Запуск" в меню "Пуск" Windows. Следовательно имя файла не нужно представлять исполняемый файл. Это может быть любое тип файла, для которого расширение были связаны с приложением установленных в системе. Например имя файла может иметь .txt расширение, если у вас есть связанный текст файлы с редактором, такие как "Блокнот", или он может иметь .doc, если у вас есть Файлы associated.doc со словом инструмент обработки, такой как Microsoft Слово. Точно так же, как и диалоговое окно "Выполнить" может принимать имя исполняемого файла с или без расширение .exe, расширение .exe необязательно в параметре fileName. Например, вы можете установить имя_файла параметр "Notepad.exe" или "Блокнот".

EDIT: оригинальный, сложный ответ:

Если вы используете Process.Start с файлом в качестве "исполняемого файла" и укажите UseShellExecute = true, он будет работать. Например:

using System;
using System.Diagnostics;

class Test
{
    static void Main()
    {
        ProcessStartInfo psi = new ProcessStartInfo("test.txt");
        psi.UseShellExecute = true;
        Process.Start(psi);
    }
}

Это открывает test.txt в Блокноте.

Фактически, UseShellExecute=true является значением по умолчанию, но, поскольку он определенно требуется, мне нравится явно указывать его, чтобы сделать это более понятным для читателя.

Ответ 2

не уверен, что его ok

System.Diagnostics.Process.Start(filePath);

Ответ 3

System.Diagnostics.Process предоставляет встроенную оболочку .Net для оболочки shell.ShellExecute.

См. PInvoke.Net для обсуждения как API, так и документов MSDN на MSDN.