我需要一种解决方法,它与在互斥的UseShellExecute和RedirectStandardOutput上使用True具有相同的效果。 我需要这个的原因是因为我想通过CMD.exe执行我的perl脚本:
perl perlcompare.pl <file1> <file2> <file3>
注意将“perl”放在前面似乎是可选的,因为该文件已经是.pl文件。
我想访问运行给出的输出,因为可能存在对用户很重要的错误消息(例如丢失文件)。还有另一种方法可以达到这个目的吗?
Dim myProcess As New System.Diagnostics.Process
myProcess.StartInfo.WorkingDirectory = "K:\Engineering\Temp\perl"
myProcess.StartInfo.UseShellExecute = True
myProcess.StartInfo.FileName = "perlcompare.pl"
myProcess.StartInfo.Arguments = """" & MasterFile & """" & " " & """" & MasterOutput & """" & " " & """" & ComparisonsOutput & """"
myProcess.StartInfo.RedirectStandardOutput = True
myProcess.Start()
Dim sOutput As String
Using ProcessStreamReader As System.IO.StreamReader = myProcess.StandardOutput
sOutput = ProcessStreamReader.ReadToEnd()
End Using
MessageBox.Show(sOutput) 'txtOutput being the output textbox.
语言和学习方面的新手,所以我会为你找到任何线索。
答案 0 :(得分:3)
我不明白为什么要将UseShellExecute
设置为 true 。它必须是 false 才能允许重定向标准IO通道
如果perl编译器可执行文件的位置在PATH中,那么您只需将FileName
设置为perl
即可。使用String.Format
从变量构建字符串而不是使用所有那些转义的引号和连接也更好
Dim myProcess As New System.Diagnostics.Process
myProcess.StartInfo.WorkingDirectory = "K:\Engineering\Temp\perl"
myProcess.StartInfo.UseShellExecute = False
myProcess.StartInfo.FileName = "perl"
myProcess.StartInfo.Arguments = String.Format(
"perlcompare.pl ""{0}"" ""{1}"" ""{2}""",
MasterFile,
MasterOutput,
ComparisonsOutput)
myProcess.StartInfo.RedirectStandardOutput = True
myProcess.Start()
如果perl编译器的位置不在PATH中,那么您可以将完全限定的文件路径放入FileName