Я столкнулся с очень неясной проблемой, в то время как я пытаюсь запустить приложение 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. НЕ РАБОТАЕТ