Похоже, что Interaction.Shell
не может открыть приложение по связанному документу.(a) соответствующая страница MSDN не говорит об этом (хотя пример для параметра PathName
кажется ошибочным тогда) и (b) даже если 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
).