我正在尝试使用以下代码,因此我可以从我的调用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,则消息框为空。
无法弄清楚为什么这是错的。如果你知道原因,请帮助我。
由于
答案 0 :(得分:6)
perl.exe可以在命令行上处理包含空格的不带引号的路径吗?尝试引用路径:
myProcessStartInfo.Arguments = @"""C:\Documents and Settings\test_perl.pl""";
由于命令行参数由空格分隔,除非引用文件路径,否则应用程序(在本例中为perl.exe)将看到三个参数:
Perl可能会尝试打开文件“C:\ Documents”。当然,这不存在。解决方案是引用包含空格的文件路径(或所有文件路径,以保持一致)。
你提到notepad.exe可以处理不带引号的文件路径。可能,这只是记事本比普通熊更聪明,并为你合并其论点。
当然,验证该路径上是否存在文件。这实际上是一条不寻常的道路;通常,您会看到类似 C:\ Documents and Settings \ myusername \ Documents \ file.ext 等用户文件。
答案 1 :(得分:0)
你的%PATH%
中有perl吗?打开命令提示符并键入“perl -v
”