Java: как скопировать текущий исполняемый файл - PullRequest
1 голос
/ 09 июля 2011

У меня есть банка. Я хочу, чтобы баночка могла сделать копию себя во время работы. Я понимаю, что окна могут иметь проблемы с этим. Как мне это сделать, или я слишком обдумываю это?

Редактировать: Чтобы объяснить немного больше ...

Я пишу переупаковываемую систему развертывания встроенного программного обеспечения ... http://code.google.com/p/heimdall-one-click/ Идея состоит в том, что разработчик ПЗУ из XDA может создать свой собственный, а затем упаковать его в кроссплатформенную развертываемую упаковку одним щелчком почти так же просто, как развернуть прошивку.

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

Ответы [ 2 ]

2 голосов
/ 09 июля 2011

Как говорит Джош, было бы неплохо, если бы вы сказали, почему вы хотите сделать это, чтобы помочь.

Отвечая только на то, что вы опубликовали, копирование jar - это просто копирование другого файла.Существует проблема, что он может быть заблокирован ОС (Windows);Другая проблема заключается в том, как найти его на компьютере, и если у пользователя, выполняющего процесс, есть необходимые разрешения.

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

РЕДАКТИРОВАТЬ, чтобы ответить на изменения в первом сообщении.

Как я уже говорил, в конце копируем файлэто проблема ОС.Если вы хотите скопировать текущий файл JAR в Windows, то этот файл не должен блокироваться другим процессом, поэтому он становится вопросом ОС, а не вопросом Java.

Возможные обходные пути:

  • Более быстрый (но самый грязный) запуск .bat, который засыпает на несколько секунд, а затем копирует.Сразу после запуска, вы закроете Java-приложение.Если вам нужно продолжать делать что-то в Java, после копирования файла .bat снова запускает приложение java (с соответствующими параметрами).
  • Вариант предыдущего немного более унылый ... запустите свой javaприложение из .bat, и первое, что делает .bat, это копирование вашего jar-файла во временный каталог ПК.Обязательно документируйте это хорошо, чтобы ваши пользователи не испугались!
  • Библиотека JNI для разблокировки файла.Есть несколько программ, которые (Unlocker) пытаются разблокировать файлы;не знаю, в какой момент он эффективен или как он повлияет на JVM.
0 голосов
/ 09 июля 2011

Полагаю, вы можете использовать:

File file = new  File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());

, чтобы получить ссылку на путь к файлу .JAR.

Тогда вы просто создаете его копию:

http://download.oracle.com/javase/tutorial/essential/io/copy.html

Ваша операционная система может этого не допустить, но я думаю, что должно.

...