2012-06-28 2 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 
  • все ок!

Так что я думаю, что-то не так с моим кодом на 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(); 

Это то, что сработало для меня как минимум.

Смежные вопросы