Как получить код завершения для (Java) процесса с Win32 API? - PullRequest
1 голос
/ 24 апреля 2009

Как я могу получить код выхода JVM (значение 'status' из вызова: System.exit (status)) из программы Windows, которая запустила эту JVM? Я пытался использовать результат из вызова ShellExecute (), но результат (42) не зависел от реального значения статуса.

Ответы [ 2 ]

2 голосов
/ 05 мая 2009

Запустите внешнее приложение, используя ShellExecuteEx вместо ShellExecute.

Перед вызовом ShellExecuteEx включите флаг SEE_MASK_NOCLOSEPROCESS в параметре для функции ShellExecuteEx. Затем вы получите дескриптор запущенного процесса в поле hProcess параметра функции ShellExecuteEx.

ShellExecuteEx: http://msdn.microsoft.com/en-us/library/bb762154(VS.85).aspx

Затем используйте функцию WaitForSingleObject или любую другую функцию WaitFor *, чтобы дождаться завершения работы внешнего приложения.

WaitForSingleObject: http://msdn.microsoft.com/en-us/library/ms687032.aspx

Затем используйте функцию GetExitCodeProcess, чтобы прочитать код завершения внешнего процесса.

GetExitCodeProcess: http://msdn.microsoft.com/en-us/library/ms683189(VS.85).aspx

1 голос
/ 24 апреля 2009

Документы MSDN для этой функции дают понять, что она не возвращает коды выхода из вызванного приложения.

Если функция завершается успешно, она возвращает значение больше 32. Если функция терпит неудачу, он возвращает значение ошибки, которое указывает на причину сбоя. Возвращаемое значение приведено как HINSTANCE для обратной совместимости с 16-разрядными приложениями Windows. Это однако, это не настоящее HINSTANCE. Это может быть приведен только к int и по сравнению с 32 или ниже коды ошибок ниже.

Кажется, что есть пример кода для получения статуса выхода также на MSDN.

...