Помогите с.ReadToEnd() в командной строке
Эй, я пытаюсь использовать программу командной строки PowerISO piso.
Я использую C#, чтобы открыть процесс и введите команду для монтирования CD / DVD. Это работает нормально, и CD / DVD монтируется каждый раз.
Беда в том, что.ReadToEnd() не перестанет читать и программа зависнет здесь. Кажется, что ответ из командной строки должен быть
PowerISO Version 4.5 Copyright(C) 2004-2009 PowerISO Computing, Inc Type piso -? for help
Mount successfully
Однако я только добираюсь до:
PowerISO Version 4.5 Copyright(C) 2004-2009 PowerISO Computing, Inc Type piso -? for help
и программа продолжит чтение навсегда, так и не получив успешно выведенное Mount.
Вот мой код C#:
String output = "";
System.Diagnostics.Process cmd = new System.Diagnostics.Process();
cmd.StartInfo.WorkingDirectory = @"C:\"; //@"
cmd.StartInfo.FileName = Path.Combine(Environment.SystemDirectory, "cmd.exe");
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.RedirectStandardError = false;
cmd.Start();
cmd.StandardInput.WriteLine(MountPrgLoc + " " +
MountPrgCmd_Mount + " " +
location + " " +
drive);
StreamReader sr = cmd.StandardOutput;
output = sr.ReadToEnd() ;
MessageBox.Show(output);
Заранее спасибо за любую помощь-Скотт
------------------ Редактировать ----------------- Подробнее:
/* DVD Attributes */
String name = "My Movie Title";
String location = "\"" + @"C:\Users\Razor\Videos\iso\Movie.iso" + "\"";
String drive= "H:";
String format = ".iso";
/* Special Attributes */
String PlayPrg = "Windows Media Center";
String PlayPrgLoc = @"%windir%\ehome\"; //@"
String MountPrg = "PowerISO";
String MountPrgLoc = "\"" + @"C:\Program Files (x86)\PowerISO\piso.exe" + "\""; //@"
String MountPrgCmd_Mount = "mount";
String MountPrgCmd_Unmount = "unmount";
1 ответ
Почему вы хотите использовать cmd.exe? Команда piso.exe будет завершена, а cmd.exe - нет. ReadToEnd() будет ждать завершения программы cmd.exe и не будет возвращаться. Лучшим способом будет напрямую вызвать piso.exe для монтирования, которое в вашем случае будет:
String output = "";
System.Diagnostics.Process cmd = new System.Diagnostics.Process();
cmd.StartInfo.WorkingDirectory = @"C:\Program Files (x86)\PowerISO";
cmd.StartInfo.FileName = "piso.exe";
cmd.StartInfo.Arguments = MountPrgCmd_Mount + " " + location + " " + drive;
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.Start();
StreamReader sr = cmd.StandardOutput;
output = sr.ReadToEnd();
cmd.WaitForExit();
MessageBox.Show(output);