Это ошеломило мой разум. Используя следующий код:Process.Start(): система не может найти указанный файл, но путь к файлу кажется законным
Process du = new Process();
string cmdPath = System.IO.Path.Combine(Environment.SystemDirectory, "du.exe");
Debug.WriteLine(cmdPath);
ProcessStartInfo info = new ProcessStartInfo(cmdPath);
info.CreateNoWindow = true;
info.Arguments = arguments;
info.UseShellExecute = false;
info.RedirectStandardOutput = true;
du.StartInfo = info;
du.EnableRaisingEvents = true;
du.OutputDataReceived += responseParser;
du.Start();
du.BeginOutputReadLine();
du.WaitForExit();
я бегу, и я получаю:
Необработанное исключение: System.ComponentModel.Win32Exception: Система не может найти указанный файл
хотя выходное значение cmdPath равно C:\Windows\system32\du.exe
!
и, конечно, если я просто ввожу содержимое cmdPath
в командную строку, он запускает файл du.exe и дает мне информацию об использовании.
Кроме того, если я заменил путь команды только «du.exe» и поместил файл du.exe в рабочий каталог, все работает нормально. Но я хочу ссылаться на то, что находится в системе.
Итак, что происходит? Насколько я могу судить, у меня есть законный спецификатор файла, но почему бы не выполнить Process.Start()
? Этот базовый код также выполняет несколько других программ и получает их выход. Остальные все работают нормально, хотя du.exe отличается от них тем, что он находится в каталоге system32. Это связано с этим?
Благодаря
Я понял это между отправкой вопроса и вашим ответом. du.exe - это 32-битный исполняемый файл, и он был неправильно помещен в system32 вместо SysWow64. Итак, когда 32-разрядная программа пошла на поиски, она не заметила этого, потому что файл du.exe оказался не в том месте. – whatsisname
Но вы не должны помещать его в системный каталог вообще. Это зарезервировано для системы. Я уверен, что вы можете найти лучшее место для своего набора инструментов unix. –
Это на самом деле SysInternals du. Я согласен, что этого не должно быть, но его там на нескольких машинах, так что теперь мне приходится с этим справляться. – whatsisname