Process.Start () не завершается при запуске команд tabcmd из C #

У меня есть задача, в которой мне нужно запустить команды tabcmd из проекта С #, который будет читать отчеты таблиц с сервера и сохранять в файл 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 непосредственно из командной строки Comman, они выполняются нормально, и файл 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"


person venky    schedule 01.06.2018    source источник


Ответы (1)


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

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

person Saeed Bolhasani    schedule 01.06.2018
comment
@venky Вы можете создать новый процесс. почему ты этого не сделал? - person Saeed Bolhasani; 01.06.2018
comment
В любом случае это не работает. Не могли бы вы проверить, соответствует ли мой процесс.Startinfo.Arguments команде ниже ›tabcmd export / Agency / AYR_CurrentYearAgencyIATA = 0125452 &: refresh = yes --pdf --pagelayout landscape --pagesize legal --width 1600 -f C: \ Reports \ StatusReport_CurrentYear_0125452.PDF - person venky; 01.06.2018
comment
@venky кажется правдой. Может быть, это проблема с символом цитаты - person Saeed Bolhasani; 01.06.2018