我正在尝试从perl脚本执行C#4.0控制台应用程序并尝试捕获应用程序的输出。 C#应用程序是一个多线程应用程序,但它使用普通的Console.WriteLine()函数将输出写入控制台。
要获取输出,我使用perl中的``方法:
my @commands = `app.exe param1 param2`
但是当我运行脚本时,我收到错误:
Unhandled Exception: System.IO.IOException: The handle is invalid.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.Console.SetCursorPosition(Int32 left, Int32 top)
at Netapp.CmDownload.Processor.DownloadProcessor.Start(String[] args)
at Netapp.CmDownload.CmDownload.Main(String[] args)
终止申请。
注意:C#应用程序是在.Net Framework 4.0上运行的64位应用程序 我尝试使用活动的perl 64bit以及32位版本运行脚本,但没有效果。
答案 0 :(得分:3)
问题是您的应用程序正在尝试以相对高级的方式使用控制台 - 设置光标位置。在这种情况下,您实际上并没有拥有控制台,您只需要管道输出...因此没有控制台句柄,SetCursorPosition
失败。
查看是否有任何命令行选项可以关闭高级控制台处理。 (如果它是您自己的应用程序,请添加一个:)