Я код на С#, поэтому я не знаю много о 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;
}
}
@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] Не возвращается до выхода другой программы.
start
вызывать команду для выполнения в фоновом режиме?