Можно ли из Java получить полную командную строку со всеми аргументами, запустившими приложение?
System.getEnv() и System.getProperties() не содержат значений.
System.getEnv()
System.getProperties()
Некоторые из них доступны из RuntimeMXBean, полученного путем вызова ManagementFactory.getRuntimeMXBean()
ManagementFactory.getRuntimeMXBean()
Вы можете, например, позвонить getInputArguments()
getInputArguments()
Javadocs для которых говорят:
Возвращает входные аргументы, передаваемые виртуальной машине Java, которая не включает аргументы в метод main. Этот метод возвращает пустой список, если для виртуальной машины Java нет входного аргумента. Некоторые реализации виртуальных машин Java могут принимать входные аргументы из разных источников: например, аргументы, передаваемые из приложения, запускающего виртуальную машину Java, такие как команда java, переменные среды, файлы конфигурации и т. Д. Как правило, не все параметры командной строки для команды 'java' передаются виртуальной машине Java. Таким образом, возвращаемые входные аргументы могут включать не все параметры командной строки.
Возвращает входные аргументы, передаваемые виртуальной машине Java, которая не включает аргументы в метод main. Этот метод возвращает пустой список, если для виртуальной машины Java нет входного аргумента.
Некоторые реализации виртуальных машин Java могут принимать входные аргументы из разных источников: например, аргументы, передаваемые из приложения, запускающего виртуальную машину Java, такие как команда java, переменные среды, файлы конфигурации и т. Д.
Как правило, не все параметры командной строки для команды 'java' передаются виртуальной машине Java. Таким образом, возвращаемые входные аргументы могут включать не все параметры командной строки.
В Linux / UNIX это должно быть возможно, когда вы получаете вывод этой команды (запускается в оболочке)
cat /proc/$PPID/cmdline
Но это вообще не переносимо и поэтому не должно использоваться в Java ...
Существует переменная окружения% ~ dp0, которая возвращает полный путь
Возможно, вы захотите посмотреть, как это делает jps. Это программа на Java, которая может получить полную командную строку для всех процессов Java, включая полное имя класса основного класса и параметры JVM.
jps
Вам могут помочь следующие ссылки:
Как получить аргументы командной строки для запущенного процесса
получить командную строку запущенных процессов
Как получить список текущих открытых окон / процессов с Java?
Так же, как примечание:
В Windows у вас есть Process Explorer от Sysinternals , который показывает вам командную строку, используемую для открытия процесса. Щелкните правой кнопкой мыши по процессу и выберите Свойства ... В открывшемся окне вы увидите Командную строку.
Если вы используете Solaris в качестве ОС, взгляните на утилиту "pargs". Печатает всю необходимую информацию.
Посмотрите на YAJSW (еще один Java Service Wrapper) - он имеет реализации на основе JNA для различных ОС (включая win32 и linux), которые делают именно это, поэтому он может получить командную строку для запущенного процесса и создать конфигурацию, которая оборачивает это в сервис. Чуть больше информации здесь .
Одна из опций, которую я использовал в прошлом для поддержания кроссплатформенного блеска, - задавать командную строку в качестве переменной среды перед выполнением команды.