2012-06-28 46 views
4

我試圖用這個代碼啓動Java程序的Java程序時:錯誤啓動從C#

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(); 

但總是收到錯誤:

Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine.

但是,如果我創建代碼.bat文件:

java -Xms512m -Xmx1536m -Xbootclasspath/p:./libs/jsr166.jar -cp ./libs/*;server.jar server.Server 
  • 一切OK!

所以我想我的C#代碼有問題嗎?

謝謝!

+0

可能會嘗試刪除「FileName」並添加「java內部參數? – kosa

+0

也許您的C#應用​​程序佔用大量內存? – nullpotent

+0

不,啓動一切正常,使用此啓動程序Java應用程序的問題,看起來像這個啓動程序作品有點孤立 – Robert

回答

0

我不確定這是否有幫助,但我確實知道Process對象具有爲進程分配的內存限制。由於批處理文件起作用,我認爲JVM的堆分配超出了相關進程允許的峯值內存。不幸的是,我不知道如何增加Process對象分配的最大內存。

我會選擇堅持使用批處理文件的方法或使用IKVM:http://www.ikvm.net/或使用jni4net:http://jni4net.sourceforge.net/

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(); 

那就是至少對我來說工作。