У меня проблема с пониманием входа и выхода класса ProcessStartInfo в.NET. Я использую этот класс для выполнения программ.exe, таких как FFmpeg, без каких-либо проблем.
Но когда я использую ProcessStartInfo для запуска программы.cmd, такой как простой foo.cmd, содержащий только @echo Hello world
, он ничего не выводит.
ProcessStartInfo oInfo = new ProcessStartInfo(@"C:\Program Files (x86)\itms\foo.cmd")
{
UseShellExecute = false,
RedirectStandardError = true,
RedirectStandardOutput = true,
CreateNoWindow = true
};
using (Process p = new Process())
{
p.StartInfo = oInfo;
p.OutputDataReceived += new DataReceivedEventHandler(transporter_OutputDataReceived);
p.Start();
p.BeginOutputReadLine();
p.WaitForExit();
}
private void transporter_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
Response.Write(e.Data + " - line<br/>");
}
Я видел множество примеров, когда люди используют cmd.exe для запуска программы.cmd, и я пробовал это, но безуспешно. Программа просто бесконечно загружается.
ProcessStartInfo oInfo = new ProcessStartInfo("cmd", "/c start foo.cmd")
{
UseShellExecute = false,
RedirectStandardError = true,
RedirectStandardOutput = true,
CreateNoWindow = true,
WorkingDirectory = @"C:\Program Files (x86)\itms"
};
Программа foo.cmd успешно работает и выводит данные при использовании инструмента командной строки в Windows и на Mac.
Может кто-нибудь, пожалуйста, демистифицируйте это для меня.
Спасибо
РЕДАКТИРОВАТЬ
Код ведет себя правильно при локальном выполнении. Проблема возникает, когда я запускаю код на нашем сайте. Либо программе не разрешено выполняться, либо вывод каким-то образом отключен.
Только cmd.exe возвращает вывод «cmd», «/c dir»» , например. возврат информации о текущем содержимом папки.
Может ли это на самом деле быть проблемой разрешения?