Конфигурация Java SxS (бок о бок)

Я столкнулся с очень неясной проблемой, в то время как я пытаюсь запустить приложение java в Windows, бок о бок (SxS).

Я сделал всю подготовку, создав файлы java.exe.config и java.exe.manifest, которые у меня есть в той же папке с JRE.

Приложение работает нормально, когда я вызываю его из командной строки (запустив файл .bat). В .bat файле используется SxS-настроенная Java (которая является единственной в ящике, в которой я запускаю приложение)

Однако, когда я пытаюсь вызвать его из другого Java-процесса (используя Runtime.getRuntime.exec()) или ProcessBuilder, кажется, что он полностью игнорирует конфигурацию SxS, а дочерний процесс Java жалуется, что он не может найти библиотеки COM, которые были причиной того, что я должен был сделать SxS. Я должен добавить, что родительский процесс Java также запускается Java.exe, который настроен для SxS. Таким образом, я бы предположил, что "Runtime.getRuntime(), ProcessBuilder()" предоставит мне загруженную среду Java SxS.

Выполняя дальнейшую отладку с помощью некоторых инструментов Windows (procexp.exe, procmon.exe), я узнал следующее: Когда я запускаю приложение из .bat файла, файл .manifest обычно считывается с помощью crss.exe(так как он должно быть). Однако, когда другой процесс порождается Java, файл .manifest НЕ принимается во внимание вообще. Одна из возможных проблем, о которых я мог думать, это то, что текущий каталог Java.exe, который запускает этот процесс, не совпадает с файлом java.exe.manifest.

Единственное, что я могу придумать, это ошибка/проблема (или, возможно, они называют ее функцией) в java-панели запуска.

У кого-то была аналогичная проблема? Может ли кто-нибудь пролить свет на вышесказанное? Очень ценится.

До сих пор я пробовал следующее:

  • Запустите java-процесс из файла .bat. <Б > РАБОТАЛО
  • Вызывается Java-процесс из родительского Java-процесса с помощью Runtime.getRuntime().exec(). DID NOT WORK
  • Invoked the .bat file from a parent Java process using Runtime.getRuntime().exec(). НЕ РАБОТАЕТ
  • Используемый ProcessBuilder устанавливает текущий каталог, в котором находится файл .manifest. НЕ РАБОТАЕТ

Ответ 1

Я тестировал его на своем компьютере, и он работает. Попробуйте:

  • читать getErrorStream() из Runtime.getRuntime(). exec (...); и отправьте сюда, если вы не можете решить это,
  • запустить процесс с полным путем (C:\Program...),
  • скомпилируйте java-программу в .jar, добавьте в папку с .bat, откройте CMD, установите текущий каталог в эту папку и запустите файл jar (используя java -jar filename.jar),