C# 从C启动java程序时出错#

C# 从C启动java程序时出错#,c#,java,launching-application,C#,Java,Launching Application,我试图用以下代码启动java程序: ProcessStartInfo info = new ProcessStartInfo(); info.WorkingDirectory = @"D:\2\server"; info.FileName = "java"; info.Arguments = "-Xms512m -Xmx1536m -Xbootclasspath/p:./libs/jsr166.jar -cp ./libs/*;server.jar

我试图用以下代码启动java程序:

ProcessStartInfo info = new ProcessStartInfo();
        info.WorkingDirectory = @"D:\2\server";
        info.FileName = "java";
        info.Arguments = "-Xms512m -Xmx1536m -Xbootclasspath/p:./libs/jsr166.jar -cp ./libs/*;server.jar server.Server";
        ServerProcess = new Process();
        ServerProcess.StartInfo = info;
        ServerProcess.Start();
但总是会出错:

VM初始化期间出错,无法保留足够的空间 对象堆的空间无法创建Java虚拟机

但如果我创建了一个.bat文件,其中包含以下代码:

java -Xms512m -Xmx1536m -Xbootclasspath/p:./libs/jsr166.jar -cp ./libs/*;server.jar server.Server
  • 一切都好
我猜我的C代码有问题


谢谢

我不确定这是否有帮助,但我知道Process对象为进程分配的内存确实有限。由于批处理文件可以工作,我认为JVM的堆分配超出了相关进程允许的峰值内存。不幸的是,我不知道有什么方法可以增加进程对象分配的最大内存


我会选择要么坚持批处理文件方法,要么使用IKVM:或使用jni4net:。

我有一段时间遇到过这个问题,从.NET应用程序启动时,必须删除内存分配命令。在您的情况下,以下是正确的命令:

    ProcessStartInfo info = new ProcessStartInfo();
    info.WorkingDirectory = @"D:\2\server";
    info.FileName = "java";
    info.Arguments = "-Xbootclasspath/p:./libs/jsr166.jar -cp ./libs/*;server.jar server.Server";
    ServerProcess = new Process();
    ServerProcess.StartInfo = info;
    ServerProcess.Start();

至少这对我来说是有效的。

可以尝试删除“文件名”并添加“java内部参数?也许您的C#应用程序占用了大量内存?不,启动一切正常,运行此launcher java应用程序时出现问题,似乎此launcher程序工作正常。”isolated@AljoshaBre,不,大约15米)每次都是这样吗?你试过在新启动的机器上运行它吗?