2014-06-24 32 views
1

我在C#中编写代码,所以我不太了解perl,但我想运行下面的代码并让perl脚本等到myprogram.exe完成后再继续剧本。一个小小的研究后,我发现,在perl的系统功能应等待过程后,没有运气与系统功能不断暂停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#写的)没有按“T返回一个值,所以我把它改成像什么下文,但perl脚本依然延续了它调用后立即myprogram.exe

static int Main(string[] args) 
    { 
     try 
     { 
      Run_Main(); 
      return 0; 
     } 
     catch (Exception) 
     {    
      sendEmail(); 
      return 1; 
     }   
    } 
+1

我不知道窗口,但可能'开始'导致命令在后台运行? – RobEarl

+0

您需要向我们展示如何从C#代码调用perl脚本。所发布的C#代码在识别潜在解决方案方面是无用的。 –

+0

@Daniel Kelley c#代码没有调用perl脚本,反过来,perl脚本运行并调用c#程序(myprogram.exe) – Luk6e

回答

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]不返回,直到其他程序退出。

相关问题