为什么我使用Interaction.Shell方法获取文件未找到的excpetion?

时间:2012-01-18 13:35:05

标签: c# vb.net shellexecute interaction

我想使用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 个答案:

答案 0 :(得分:4)

看起来Interaction.Shell无法通过关联文档打开应用程序。 (a)相关的MSDN page没有这样说(尽管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类,因为它通常会为启动的进程提供更多的robus处理。在这种情况下,它还使您“免于”​​知道哪个程序与.txt文件相关联(除非您总是想使用notepad.exe)。