using System;
using System.Diagnostics;
namespace dnet {
public class dnet {
static void Main( string[] args ) {
try {
Process.Start("jconsole.exe");
Console.WriteLine("Success!");
} catch (Exception e) {
Console.WriteLine("{0} Exception caught.", e);
}
}
}
}
如果我的PATH环境变量被设置为
c:\windows;c:\windows\sytem32;c:\programs\jdk16\bin
它完美地运行。但是,如果设置了PATH环境变量为
c:\windows;c:\windows\sytem32;c:\\programs\jdk16\bin
(注意 "c:" 和 "programs" 之间的两个反斜杠),这会导致 win32 异常。
System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified
at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at dnet.dnet.Main(String[] args)
有趣的是,在我运行.NET程序并得到异常的同一命令提示符中,我可以简单地键入"jconsole.exe",程序就会启动。Windows似乎没有问题地在PATH中找到了具有双反斜杠的可执行文件,但Process.Start()却出现了问题。
为什么PATH中的额外反斜杠会引起问题,以及如何解决这个问题?我不知道我想要调用的可执行文件将在运行时位于哪里,因此我宁愿依赖于PATH变量。