Process.Start () и переменная среды PATH
У меня есть следующее тривиальное приложение на 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.