パスが二重引用符で囲まれている場合でも、 Windows 8 のパスにスペースがあると、C# でプロセスを開始する際に問題が発生します。
次のコードは、XP および Windows 7 マシンで何年も正常に動作していましたが、最近、一部の開発ボックスを Windows 8 に切り替えたところ、次のエラーが発生しました。
'D:\Workspace\Visual' is not recognized as an internal or external command, operable program or batch file.
コード:
string command = "\"D:\\Workspace\\Visual Studio 2010\\Dev\\Tools\\Editors\\AssetManager\\bin\\Tools\\TextureAtlasBuilder.exe\"";
string arguments = "\"D:\\Local\\Temp\\xu2twc4d.cg1\" \"environment-textures\"";
ProcessStartInfo startInfo = new ProcessStartInfo
{
CreateNoWindow = true,
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Hidden,
RedirectStandardError = true,
RedirectStandardOutput = true,
FileName = string.Format(CultureInfo.InvariantCulture, @"{0}\cmd.exe", Environment.SystemDirectory),
Arguments = string.Format(CultureInfo.InvariantCulture, "/C {0} {1}", command, arguments)
};
Process process = new Process
{
StartInfo = startInfo
};
process.OutputDataReceived += new DataReceivedEventHandler(StandardOutputHandler);
process.ErrorDataReceived += new DataReceivedEventHandler(StandardErrorHandler);
process.Start();
二重引用符の有無にかかわらずリテラル文字列、二重引用符の有無にかかわらず逐語的な文字列を試しましたが、常に同じエラーが発生します!
私は何を間違っていますか?!
ありがとう