我有一个任务,我必须从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"
答案 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