Почему я получаю исключение для файла с помощью метода Interaction.Shell? - PullRequest
1 голос
/ 18 января 2012

Я хочу открыть файл блокнота, используя метод 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?

1 Ответ

4 голосов
/ 18 января 2012

Похоже, что 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).

...