从C#运行tabcmd命令时,Process.Start()无法完成

时间:2018-06-01 14:55:51

标签: c# cmd tableau process.start

我有一个任务,我必须从c#project运行tabcmd命令,它将从服务器读取tableau报告并保存到pdf文件中。我使用以下代码来完成它。

string reportPath = "/Agency/AYR_CurrentYearAgencyIATA=0125452&:refresh=yes";
string currentYearPdf = @"C:\Reports\StatusReport_CurrentYear_0125452.PDF";
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.WorkingDirectory = @"C:\tabcmd\Command Line Utility\";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = false;
process.StartInfo.RedirectStandardOutput = false;
process.StartInfo.RedirectStandardError = false;
process.StartInfo.Arguments = "/C tabcmd login -s http://prodtableau -u xxx -p xxx";
process.Start();
process.StartInfo.Arguments = "'/C tabcmd export \"" + reportPath + "\"" +
    " --pdf --pagelayout landscape--pagesize legal --width 1600 -f \"" + currentYearPdf +
     "\"'";
process.Start();

当我直接从Comman提示运行这些tabcmd命令时,它们执行正常并且pdf文件保存到我的本地目录中,但是当通过c#代码运行时,第二个进程启动但它永远不会结束并且不生成所需的pdf文件。 使用的tabcmd命令是

  

tabcmd export" / Agency / AYR_CurrentYearAgencyIATA = 0125452&:refresh = yes" --pdf --pagelayout landscape --pagesize legal --width 1600 -f" C:\ Reports \ StatusReport_CurrentYear_0125452.PDF"

1 个答案:

答案 0 :(得分:0)

如下修改您的代码并再次测试:

        process.StartInfo.Arguments = "/C tabcmd login -s http://prodtableau -u xxx -p xxx";
        process.Start();

        process.WaitForExit()

        process.StartInfo.Arguments = "'/C tabcmd export \"" + @reportPath + "\"" + " --pdf --pagelayout landscape--pagesize legal --width 1600 -f \"" + @currentYearPdf + "\"'";
        process.Start();

        process.WaitForExit()

WaitForExit()使当前线程等待,直到关联的进程终止。应该在进程上调用所有其他方法之后调用它。要避免阻止当前线程,请使用Exited事件。
有关详细信息,请参阅此link