ProcessStartInfo无法调用perl.exe

时间:2009-10-20 05:08:16

标签: c# perl processstartinfo

我正在尝试使用以下代码,因此我可以从我的调用perl脚本 c#程序。我正在使用xd service pack3上的visual stdio 2008进行开发。

 myProcess = new Process();
        ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("perl.exe");
        myProcessStartInfo.Arguments = @"C:\Documents and Settings\test_perl.pl";
        myProcessStartInfo.UseShellExecute = false;
        myProcessStartInfo.RedirectStandardOutput = true;
        myProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        myProcessStartInfo.CreateNoWindow = true;
        myProcess.StartInfo = myProcessStartInfo;

        myProcess.Start();
        string output = myProcess.StandardOutput.ReadToEnd();
        MessageBox.Show(output);
        myProcess.WaitForExit();

我验证test_perl.pl是否存在,如果我将perl.exe更改为notepad.exe,则上述代码可以正常工作。但是,如果我使用perl.exe,则消息框为空。

无法弄清楚为什么这是错的。如果你知道原因,请帮助我。

由于

2 个答案:

答案 0 :(得分:6)

perl.exe可以在命令行上处理包含空格的不带引号的路径吗?尝试引用路径:

myProcessStartInfo.Arguments = @"""C:\Documents and Settings\test_perl.pl""";

由于命令行参数由空格分隔,除非引用文件路径,否则应用程序(在本例中为perl.exe)将看到三个参数:

  1. C:\文件
  2. 设置\ test_perl.pl
  3. Perl可能会尝试打开文件“C:\ Documents”。当然,这不存在。解决方案是引用包含空格的文件路径(或所有文件路径,以保持一致)。

    你提到notepad.exe可以处理不带引号的文件路径。可能,这只是记事本比普通熊更聪明,并为你合并其论点。

    当然,验证该路径上是否存在文件。这实际上是一条不寻常的道路;通常,您会看到类似 C:\ Documents and Settings \ myusername \ Documents \ file.ext 等用户文件。

答案 1 :(得分:0)

你的%PATH%中有perl吗?打开命令提示符并键入“perl -v