0

有一个名为 cdrtfe 的开源软件(位于http://cdrtfe.sourceforge.net/),它支持通过命令行刻录 CD。当我使用 cmd.exe 以基本方式运行命令时,它可以正确燃烧,没有任何问题。但是,当我在解析所需参数的同时使用 C# 创建进程时,cdrtfe 显示好像它即将正常工作,但随后它突然抱怨磁盘上没有空间。我还注意到它甚至没有检测到安装了 CD 刻录机驱动器。我不确定为什么当我通过 C# 代码调用它时它会以这种方式表现,但我在这里的栅栏上......我似乎无法解决这个问题。

我什至尝试用必要的命令写出一个 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 中开发的具有管理员权限的 WPF 应用程序。由于我仍在调试,因此代码在同一帐户下运行。

编辑2:我只是尝试运行没有任何参数的exe,只是为了正常执行它并给出类似的结果。它只是拒绝检测我的 CD/DVD 驱动器。

4

4 回答 4

0

我知道您的问题与实例 ProcessStartInfo 的错误配置有关。尝试使用静态方法 Process.Start(string fileName, string arguments)

于 2013-09-15T18:54:16.743 回答
0

首先您是否验证了您的输入字符串?格式是否正确?其次,您需要将 RaisingEvents 设置为 True 并将 Exe 输出重定向到处理程序,您可以从该处理程序中看到应用程序 GUI 中的输出。如果您需要进一步的帮助,请添加评论。我很乐意在这方面为您提供更多帮助。

于 2013-09-15T20:20:22.403 回答
0

我已经为您编写了示例代码,希望这会对您有所帮助。请根据您的程序进行纠正。当你得到你的解决方案时,请不要忘记投票。

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); }));
   }
于 2013-09-16T05:42:08.290 回答
0

我使用了@ZahidKakar 发布的代码,它工作得很好,但并没有解决 cdrtfe 的问题。我决定改用 CDBurnerXP(也支持命令行刻录,甚至流回进度),它工作得很好。

于 2013-09-21T12:56:01.850 回答