0

ねえ、私は 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

そして、プログラムは永久に読み取りを続け、マウントが正常に出力されることはありません。

ここに私の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";
4

1 に答える 1

0

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);
于 2010-09-25T20:06:22.067 に答える