Приостановить выполнение сценария Perl до завершения внешней программы

1

Я код на С#, поэтому я не знаю много о perl, но я хотел бы запустить код ниже и запустить скрипт perl, пока myprogram.exe не будет закончен, прежде чем продолжить в скрипте. После небольшого исследования я обнаружил, что системная функция в perl должна ждать завершения процесса, прежде чем продолжить

    my $cmd = '\\\serverpath\Shared\myprogram.exe ';
    my $result = system("start /LOW $cmd pram1");

    my $cmd2 = '\\\serverpath\Shared\openPDF.pdf ';
    my $result2 = system("start /LOW $cmd2 ");

Затем, не повезло с системной функцией, я думал, что проблема в том, что myprogram (написано в С#) не возвращает значение, поэтому я изменил его на что-то вроде ниже, но скрипт perl по-прежнему продолжается сразу после вызова myprogram.exe

    static int Main(string[] args)
    {
        try
        {
            Run_Main();
            return 0;
        }
        catch (Exception)
        {              
            sendEmail();
            return 1;
        }           
    }
  • 1
    Я не знаю Windows, но может start вызывать команду для выполнения в фоновом режиме?
  • 0
    Вы должны показать нам, как вы вызываете Perl-скрипт из своего кода C #. Размещенный код C # практически бесполезен в плане определения потенциального решения.
Показать ещё 6 комментариев
Теги:

1 ответ

1
Лучший ответ

@Luk6e обнаружил, что start выполнял команду в фоновом режиме, чтобы system не дождалась. Запустите команду без start:

my $cmd = '\\\serverpath\Shared\myprogram.exe ';
my $result = system("$cmd pram1");

my $cmd2 = '\\\serverpath\Shared\openPDF.pdf ';
my $result2 = system("$cmd2 ");

или передать флаг /wait:

my $cmd = '\\\serverpath\Shared\myprogram.exe ';
my $result = system("start /wait /LOW $cmd pram1");

my $cmd2 = '\\\serverpath\Shared\openPDF.pdf ';
my $result2 = system("start /wait /LOW $cmd2 ");

/w [ait] Не возвращается до выхода другой программы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню