CLI命令+参数执行不正确。

时间:2018-11-19 18:47:08

标签: c# visual-studio-2017 command-line-interface

我正在使用Visual Studio C#应用程序中的CLI命令。该应用程序使用CLI(命令行界面)与Flash Programmer 2(Texas Instruments Software,用于在CC2560中引导加载固件)进行接口。 我检查了StackOverflow中的一些示例,但未能成功实现解决方案。

我的申请步骤:

  • 选择串行端口
  • 打开控制台
  • 执行srfprog.exe
  • 执行命令行(srfprog -t soc(COM84,CC2650)-e -p -v -f c:\ test.bin)
  • 检查编程是否成功

我的文件位于:D:\ Projects \ Test_Fixture \ Test_Fixture_Visual_Studio \ SmartRF Tools \ Flash Programmer 2 \ bin \ srfprog.exe 当我在CMD(Windows)中执行此操作时,将显示“提示”窗口 enter image description here

此屏幕弹出后,我发送了对芯片进行编程的命令

srfprog -t soc(COM84,CC2650)-e -p -v -f c:\ test.bin 此命令将编程并验证微控制器CC2650中的代码,如下面的屏幕截图所示:

enter image description here

编程非常完美。 但是,当我运行(单击按钮-加载固件)时,我的应用程序立即打开并关闭Shell窗口。如下图所示 enter image description here

我的代码如下:

    private void button2_Click(object sender, EventArgs e)
    {

        System.Diagnostics.Process CC2650 = new System.Diagnostics.Process();
        CC2650.StartInfo.FileName = @"D:\Projects\Test_Fixture\Test_Fixture_Visual_Studio\SmartRF Tools\Flash Programmer 2\bin\srfprog.exe";
        CC2650.StartInfo.Arguments = "srfprog -t soc(COM84,CC2650) -e -p -v -f c:\test.bin"; //argument
        CC2650.StartInfo.UseShellExecute = false;
        CC2650.StartInfo.RedirectStandardOutput = true;
        CC2650.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
        CC2650.StartInfo.CreateNoWindow = false; //not diplay a windows
        CC2650.Start();
        string output = CC2650.StandardOutput.ReadToEnd(); //The output result
        CC2650.WaitForExit();

    }

在此测试中,我使用固定的COM端口。稍后,我将选择端口。

为什么我的软件崩溃并且无法加载固件? 感谢您的关注和时间。

2 个答案:

答案 0 :(得分:0)

您的代码似乎通过将 srfprog 包含在参数中而加倍。文件名定义了可执行文件,参数应该只是文件名后面的内容。

CC2650.StartInfo.Arguments = "-t soc(COM84,CC2650) -e -p -v -f c:\test.bin";

答案 1 :(得分:0)

如前所述,您无需在参数中再次传递程序名称。要检查发生了什么,请使用下面的代码。它将以异步方式读取输出和错误,因此我们可以在srfprog.exe运行时分析输出。 我这里没有任何C#编译器,因此在编写此处之前无法测试此代码,也许您必须进行一些更改才能使其正常工作。请尝试一下,让我知道在Visual Studio输出控制台中将打印什么内容。

// Add "using System.Diagnostics;"
private void button2_Click(object sender, EventArgs e)
{
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.FileName = @"D:\Projects\Test_Fixture\Test_Fixture_Visual_Studio\SmartRF Tools\Flash Programmer 2\bin\srfprog.exe";
    startInfo.Arguments = "-t soc(COM84,CC2650) -e -p -v -f c:\test.bin";
    startInfo.UseShellExecute = false;
    startInfo.RedirectStandardOutput = true;
    startInfo.RedirectStandardError = true;

    Process process = new Process();
    process.StartInfo = startInfo;
    process.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
    process.ErrorDataReceived += new DataReceivedEventHandler(OutputHandler);
    process.Start();
    process.BeginOutputReadLine();
    process.BeginErrorReadLine();
    process.WaitForExit();
}

static void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine) 
{
    Console.WriteLine(outLine.Data);
}
相关问题