我有一个Java应用程序,我想生成一个新进程(启动一个.bat文件),它将通过双击它来做同样的事情。
为了催生这个过程,我尝试了Runtime.getRuntime().exec()
和ProcessBuilder
。这两种方法都有效(它们可以启动.bat文件),但我的问题是它们实际上并没有做与双击它完全相同的事情。
更具体地说,这个.bat文件启动一个JVM(java.exe MyMainClass),该JVM被配置为使用Windows SxS(并行)运行。因此,我创建了适当的java.exe.config和java.exe.manifest文件。当我点击它时,java应用程序启动并且相应的.dlls成功加载(我需要SxS的原因)。
我的问题是,当我使用 ProcessBuilder
或 Runtime.getRuntime().exec()
启动完全相同的.bat文件(具有完全相同的参数和进程环境)时,它似乎没有考虑我的 SxS 配置,因此我所需的 .dll 根本没有加载,导致错误。
有没有人知道如何启动这个.bat文件,就像我双击它时 windows 一样?此外,是否有人有Java SxS部署的经验?我真的不明白为什么ProcessBuilder忽略了我的SxS配置。
提前谢谢。
您可以尝试启动一个cmd窗口,该窗口加载您的应用程序bat文件:
Runtime.getRuntime().exec("cmd /c start cmd.exe /K "C:\path\to\the\app.bat arg1 arg2"");