我在C#中编码所以我不太了解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(用c#编写)没有返回值,所以我将其更改为类似下面的内容,但perl脚本仍然在继续它调用myprogram.exe
static int Main(string[] args)
{
try
{
Run_Main();
return 0;
}
catch (Exception)
{
sendEmail();
return 1;
}
}
答案 0 :(得分: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]在其他程序退出之前不返回。