这个名为cdrtfe的开源软件(位于http://cdrtfe.sourceforge.net/)支持通过命令行刻录CD。当我使用cmd.exe以基本方式运行命令时,它正确刻录没有任何问题。但是当我在使用所需的参数进行解析时使用C#来创建进程时,cdrtfe会显示它好像正常工作但是它突然抱怨磁盘上没有空间。我还注意到它甚至没有检测到安装了CD刻录机驱动器。我不知道为什么当我通过C#代码调用它时它会以这种方式表现,但我在这里fence ...我似乎无法解决这个问题。
我甚至尝试用必要的命令写出一个bat文件,并使用Process调用调用bat文件,但它仍然失败并出现相同的错误。但是,手动运行它创建的同一个bat文件会显示正面结果并开始刻录。
有没有人为此获得解决方案?
以下是我使用的一小段代码: -
String filesargument = "";
for (int i = 0; i < m_Files.Count; i++)
{
filesargument += string.Format("\"{0}\"", m_Files[i].FullName);
filesargument += " ";
}
string path = Path.Combine(
System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
, @"cdrtfe");
var startInfo = new ProcessStartInfo();
Process burnProcess = new Process();
startInfo.Arguments = string.Format(@"/audio {0}/execute /exit /nosplash", filesargument);
startInfo.UseShellExecute = true;
startInfo.WorkingDirectory = path;
startInfo.FileName = @"cdrtfe.exe";
burnProcess.StartInfo = startInfo;
burnProcess.Start();
burnProcess.WaitForExit();
由于
编辑:抱歉缺乏细节。这是一个在VS2010中使用admin privalges开发的WPF应用程序。由于我还在调试,代码在同一帐户下运行。
编辑2:我只是尝试运行没有任何参数的exe只是为了正常执行它并给出类似的结果。它只是拒绝检测我的CD / DVD驱动器。
答案 0 :(得分:0)
我知道您的问题与实例ProcessStartInfo的错误配置有关。 尝试使用静态方法Process.Start(string fileName,string arguments)
答案 1 :(得分:0)
首先验证输入字符串了吗?它的格式是否正确?其次,您需要将RaisingEvents设置为True并将Exe输出重定向到Handler,您可以在其中看到Application GUI中的Output。添加评论如果您需要进一步的帮助。在这方面,我将很乐意为您提供更多帮助。
答案 2 :(得分:0)
我已为您编写示例代码,希望这会对您有所帮助。请根据您的计划纠正它。当你得到解决方案时,Plz别忘了投票。
private ProcessStartInfo psi;
private Process cmd;
private delegate void InvokeWithString(string text);
public void StartBurning()
{
string filePath = "Your Exe path";
psi = new ProcessStartInfo(filePath);
System.Text.Encoding systemencoding = System.Text.Encoding.GetEncoding(Globalization.CultureInfo.CurrentUICulture.TextInfo.OEMCodePage);
var _with1 = psi;
_with1.Arguments = "Your Input String";
_with1.UseShellExecute = false;
// Required for redirection
_with1.RedirectStandardError = true;
_with1.RedirectStandardOutput = true;
_with1.RedirectStandardInput = true;
_with1.CreateNoWindow = false;
_with1.StandardOutputEncoding = systemencoding;
// Use OEM encoding for console applications
_with1.StandardErrorEncoding = systemencoding;
// EnableraisingEvents is required for Exited event
cmd = new Process {
StartInfo = psi,
EnableRaisingEvents = true
};
cmd.ErrorDataReceived += Async_Data_Received;
cmd.OutputDataReceived += Async_Data_Received;
cmd.Exited += processExited;
cmd.Start();
myProcList.Add(cmd.Id);
cmd.BeginOutputReadLine();
cmd.BeginErrorReadLine();
}
private void Async_Data_Received(object sender, DataReceivedEventArgs e)
{
this.Invoke(new InvokeWithString(Sync_Output), e.Data);
}
private void Sync_Output1(string text)
{
//This Textbox needs to place at the GUI to check the output Log from your exe.
txtLog.AppendText(text + Environment.NewLine);
}
private void processExited(object sender, EventArgs e)
{
this.BeginInvoke(new Action(() => { MessageBox.Show("The burn process Terminated.", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); }));
}
答案 3 :(得分:0)
我使用了@ZahidKakar发布的代码并且它工作得很好但是它没有解决cdrtfe的问题。我已经决定使用CDBurnerXP(也支持命令行刻录甚至流回进度)并且它运行良好。