Я хочу открыть файл блокнота с помощью метода VisualBasic.Interaction.Shell
. В настоящее время я получаю исключение, не найденное в файле, используя следующий код.
int pid = Interaction.Shell(@"D:\abc.txt", AppWinStyle.NormalNoFocus, false, -1);
Но это работает:
int pid = Interaction.Shell(@"notepad.exe", AppWinStyle.NormalNoFocus, false, -1);
Что только открывает файл блокнота. Почему это?
Мне нужно открыть файл в определенном месте. Я вижу некоторое преимущество при выполнении Interaction.Shell. Как можно открыть файл в определенном месте с помощью Interaction.Shell?
Похоже, что Interaction.Shell
не может открыть приложение связанным документом. (а) соответствующая страница MSDN не говорит об этом (хотя пример для параметра PathName
кажется ошибочным тогда) и (б), даже если D:\abc.txt
существует, он терпит неудачу.
В качестве альтернативы вы можете использовать класс System.Diagnostics.Process
:
using (Process process = Process.Start(@"D:\abc.txt"))
{
int pid = process.Id;
// Whether you want for it to exit, depends on your needs. Your
// Interaction.Shell() call above suggests you don't. But then
// you need to be aware that "pid" might not be valid when you
// you look at it, because the process may already be gone.
// A problem that would also arise with Interaction.Shell.
// process.WaitForExit();
}
Обратите внимание, что D:\abc.txt
должен существовать, или вы все равно получаете FileNotFoundException
.
Обновить Если вам действительно нужно использовать Interaction.Shell
, вы можете использовать следующие
int pid = Interaction.Shell(@"notepad.exe D:\abc.txt", false, -1);
Лично я бы пошел с классом Process
, так как он обычно обеспечивает более эффективную обработку запущенного процесса. В этом случае он также освобождает вас от "знания", какая программа связана с файлами .txt
(если вы не всегда хотите использовать notepad.exe
).