我有以下简单的 C# 应用程序,它只是尝试启动“jconsole.exe”,它在我的机器上位于 C:\Programs\jdk16\bin 中。
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 变量。