如何从使用进程命令调用的 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
。这可能是一个很好的起点 :)
我有一个 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
。这可能是一个很好的起点 :)