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