私のマシンでは C:\Programs\jdk16\bin にある "jconsole.exe" を単に起動しようとする次の簡単な C# アプリケーションがあります。
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」の間の 2 つのバックスラッシュに注意してください)、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 変数に依存したいと思います。