从C#启动Java程序时出错

时间:2012-06-28 16:11:22

标签: 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 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#代码有问题吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

我不确定这是否有帮助,但我确实知道Process对象确实为进程分配了内存限制。由于批处理文件有效,我认为JVM的堆分配超过了关联进程允许的峰值内存。不幸的是,我不知道如何增加Process对象分配的最大内存。

我会投票支持批量文件方法或使用IKVM:http://www.ikvm.net/或使用jni4net:http://jni4net.sourceforge.net/

答案 1 :(得分:0)

我有一段时间没有这个问题,从.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();

这至少对我有用。