Как открыть файл с помощью обработчика оболочки по умолчанию? - PullRequest
25 голосов
/ 01 мая 2009

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

Ответы [ 3 ]

59 голосов
/ 01 мая 2009

РЕДАКТИРОВАТЬ: более новый, более простой ответ.

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

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

РЕДАКТИРОВАТЬ: Оригинальный, сложный ответ:

Если вы используете 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 является значением по умолчанию, но, поскольку это определенно требуется, я хотел бы указать его явно, чтобы сделать это понятнее для читателя.

6 голосов
/ 01 мая 2009

не уверен, что все нормально

System.Diagnostics.Process.Start(filePath);
2 голосов
/ 01 мая 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...