Process.Start () не завершается при запуске команд tabcmd из C # - PullRequest
0 голосов
/ 01 июня 2018

У меня есть задача, где мне нужно запускать команды tabcmd из проекта c #, которые будут читать отчеты с сервера и сохранять их в файл 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();

Когда я запускаю эти команды tabcmd непосредственно из командной строки, они выполняются нормально, и файл PDF сохраняется в моем локальном каталоге, но при запуске через код c # 2-йПроцесс начинается, но он никогда не заканчивается и не генерирует необходимый файл 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 голосов
/ 01 июня 2018

измените ваш код, как показано ниже, и протестируйте снова:

        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.Для получения дополнительной информации см. ссылку

...