我正在从我的应用程序运行dos命令,但是dos窗口只是挂起而没有返回任何输出。它在Windows 8下运行,但不在Windows 7下运行。
这是我的代码:
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim process As New Process()
process.StartInfo.FileName = "C:\Program Files (x86)\Pico Technology\PicoScope6\picoscope.com"
process.StartInfo.UseShellExecute = False
process.StartInfo.Arguments = "/a Measurements.CSV?"
process.StartInfo.RedirectStandardInput = True
process.StartInfo.RedirectStandardOutput = True
process.Start()
Dim reader As StreamReader = process.StandardOutput
Dim output As String = reader.ReadToEnd()
RichTextBox1.Text = output
End Sub
picoscope.com是一个'包装'由PicoScope供应商提供 - 它似乎是一个非常小的.net应用程序,它使用一些命令(未知)调用主要的PicoScope.exe程序。需要运行PicoScope.exe应用才能实现此功能。
我写了一个小型控制台应用程序,这很好用 - 但我甚至无法从基于表单的应用程序调用我的控制台应用程序。
控制台应用的代码:
Sub Main()
Dim process As New Process()
process.StartInfo.FileName = "C:\Program Files (x86)\Pico Technology\PicoScope6\picoscope.com"
process.StartInfo.Arguments = "/a Measurements.CSV?"
process.StartInfo.UseShellExecute = False
process.StartInfo.RedirectStandardOutput = True
process.Start()
' Synchronously read the standard output of the spawned process.
Dim reader As StreamReader = process.StandardOutput
Dim output As String = reader.ReadToEnd()
process.WaitForExit()
process.Close()
End Sub
这似乎是Windows 7的一个奇怪问题。
我可以毫无问题地打开cmd.exe,也可以生成其他应用程序。
这几乎就像在运行的picoscope程序和我的应用程序之间存在一些冲突。
尝试调试似乎没有任何帮助,除了这个:
A first chance exception of type 'System.InvalidOperationException' occurred in System.dll
我尝试了几种不同的方法,禁用shell重定向,甚至尝试将输出重定向到文件。但似乎与Picoscope应用程序有关的任何事情都会妨碍它的运行。
我甚至尝试编写另一个控制台应用程序来将文本输出重定向到控制台和文件,并且它们有效(因为picoscope应用程序并不参与!)。
同样,一个简单的dos批处理文件带有" echo Hello World"在它成功重定向到我的表单应用程序 - 所以我确定我的代码是正确的。
我现在对这里的问题感到茫然。
我在SP1上使用Visual Studio 2013,Windows 7。
有人可以提出任何建议吗?
长篇大论道歉,我试图尽可能多地提供详细信息。
编辑:更奇怪的是,我在另一台Windows 7 PC上尝试了我的工作应用程序并且它可以运行...
我怀疑这必须与我的特定Windows 7 PC(新版本)相关。
我将UAC设置与其他PC进行了比较 - 它们是相同的。
感谢。