我需要一个与在互斥的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.我对语言和学习都很陌生,所以我会寻找你为我提供的任何线索。
发布于 2017-03-14 15:32:11
我不明白为什么要将UseShellExecute设置为true。它需要是假的,才能允许标准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编译器的位置不在路径中,则只需将一个完全限定的文件路径放入FileName。
https://stackoverflow.com/questions/42789463
复制相似问题