Еще несколько дней назад я мог запускать Java-приложения из командной строки, а затем что-то сломалось. Я проследил проблему до невозможности вызвать java.exe из c:\Windows\System32. Даже если я укажу полный путь (c:\windows\system32\java.exe), он все равно не выполнится:« c:\Windows\System32\java.exe» не распознается как внутренняя или внешняя команда, работающая программа или пакет файл. " Я попытался скопировать его под другим именем в том же каталоге, но он все равно не сработал. Только когда я скопировал файл java.exe в другой каталог и поместил этот каталог в PATH, я, наконец, заставил его работать, так что это мое обходное решение, но я все еще хотел бы знать, почему он прекратил выполнение из c:\Windows\System32 после месяцы счастья там!
3 ответа
Возможно, ваша проблема связана с установкой 64-битной или 32-битной Java JRE. У меня были похожие проблемы, где я мог видеть
C:\Windows\System32\java.exe
но не смог его запустить. Я нашел поток, который намекнул, что должна быть копия файла на
C:\Windows\SysWOW64\java.exe
для выполнения 64-битной Java из 32-битного приложения.
В моем случае я знаю, что исправление корпоративной безопасности нарушало мою установку, так как оно работало, тогда не работало сразу после того, как я позволил запустить исправление.
Если вы хотите выполнить Java из командной строки, вы должны добавить его в свой путь. Перейдите в Панель управления -> Система -> Дополнительные параметры системы, затем перейдите на вкладку «Дополнительно» и нажмите «Переменные среды». Найдите системную переменную с именем PATH и добавьте к ней ;C:\Path\to\java\bin
. Теперь вы должны иметь возможность запускать Java из cmd.exe.
Файл java.exe в C:\Windows\system32 помещен туда, потому что этот каталог почти наверняка окажется на вашем пути раньше, чем большинство других. То есть это способ убедиться, что этот java.exe находится первым на вашем пути, независимо от того, какие JRE или JDK вы установили.
Что этот java.exe делает, так это проверяет ваш реестр, чтобы увидеть, какой настоящий java.exe должен быть запущен, и запускает его для замены.
В результате, если вы хотите запустить определенную версию Java, и у вас нет прав администратора (вы можете редактировать свой путь пользователя, но не можете редактировать системный путь), вам нужно отредактировать реестр, чтобы сделать нужную версию тот, который будет выбран java.exe в C:\Windows\system32.
В документе Oracle для Java 1.6.x: «Программа установки для версии Microsoft Windows среды выполнения SE SE использует реестр для записи пути и информации о версии. Средство запуска приложений в системном каталоге использует параметры реестра для получения расположения среды выполнения Java SE, которую они должны использовать при запуске приложения. "
... а также ...
"Установлено две копии исполняемого файла java.exe. Одна копия находится в каталоге bin JRE. Вторая копия помещается в C:\windows\system или C:\winnt\system32, в зависимости от системы. Из-за своего расположения в системном каталоге, эта вторая копия java.exe может быть запущена из любой папки без указания полного пути к ней.
Эта вторая копия исполняемого файла java.exe использует параметр реестра CurrentVersion, чтобы определить, какой раздел реестра использовать для поиска расположения JRE. Например, если для реестра CurrentVersion установлено значение 1.6, исполняемый файл java.exe в системном каталоге будет искать ключ HKEY_LOCAL_MACHINE\Software\JavaSoft\Java SE Runtime Environment\1.6, чтобы определить, где установлена JRE. "