如何从使用进程命令调用的 extern java 程序中获取错误

How to get error from extern java program that calls with process command

我有一个 vb.net 应用程序,它使用 process 命令调用 java 程序。那很好用。但是我尝试从 java 程序中获取明文异常。为此,我设置

startInfo.UseShellExecute = False
startInfo.RedirectStandardError = True
…
Dim myStreamReader As StreamReader = process.StandardError
Dim errorMsg As String = myStreamReader.ReadLine
process.WaitForExit()
…

此代码引发异常:“指定的可执行文件不是有效的 Win32 应用程序。”是否有另一种方法来获取异常或如何解决错误?

编辑 1:

我这样调用Java程序:

Dim startInfo As New ProcessStartInfo
startInfo.FileName = "JavaProgramName.jar"
process.StartInfo.Verb = "java -jar"
startInfo.Arguments = stringParam
Process.Start(startInfo)

解决方案 1:

Dim startInfo As New ProcessStartInfo()
startInfo.FileName = """c:\...\java.exe"" –jar """ (read from HKCR)
startInfo.Arguments = "JavaProgramName.jar" & stringParam 
startInfo.UseShellExecute = False
startInfo.RedirectStandardError = True
process = Process.Start(startInfo)
Dim myStreamReader As StreamReader = p.StandardError
Dim errorMsg As String = myStreamReader.ReadLine

解决方案 2,这也有效:

startInfo.FileName = = """c:\...\java.exe"" -jar JavaProgramName.jar " & stringParam
startInfo.UseShellExecute = False
startInfo.RedirectStandardError = True
process = Process.Start(startInfo)
Dim myStreamReader As StreamReader = p.StandardError
Dim errorMsg As String = myStreamReader.ReadLine

嗯,java "executables" 不是有效的 Win32 应用程序。你必须 运行

java yourJavaApp.jar

因为您关闭了 UseShellExecute,您只能 运行 实际的可执行文件 - 例如,使用 shell 执行,您可以 Process.Start("MyDocument.doc"),但没有它,您需要以 MyDocument.doc 作为参数显式启动 Word。

当然,这可能意味着您需要找到 Java 安装路径。当您使用 shell 执行时,它会在注册表中查找哪个应用程序用于该特定文件扩展名 - 在本例中为 HKCR\jarfile\shell\open\command。这可能是一个很好的起点 :)