У меня есть следующее тривиальное приложение С#, которое просто пытается запустить "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:" и "program" ), сбой с исключением 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.