2014-01-10 1 views
4

Я написал приложение Java, которое включает самообучающийся файл. Self updater загружает новые версии программ с веб-сервера и заменяет файлы приложений. Хотя это работает отлично, если приложение установлено, например. в домашнем каталоге пользователей он не работает на машинах Windows, если он установлен в папке C: \ Program Files. Это связано с тем, что JVM выполняется под учетной записью пользователя, которая не имеет права на запись в каталог программы. Если родная программа, например. установщик, пытается записать в папку программы, обычно появляется всплывающее окно с просьбой разрешить операцию записи. Это не происходит для приложений Java. Зачем?Запись в C: Program Files из Java-программы

Есть ли способ достичь того, что операция записи программы Java в ограниченную папку вызывает всплывающее окно безопасности, чтобы пользователь мог разрешить доступ к этой папке?


Спасибо за ваши ответы. Согласно ответам я вижу следующие варианты:

  1. Java Web Start
    Для меня это не вариант для конечных пользователей. Я думаю, что никто не может ожидать от обычного конечного пользователя узнать, что такое Java Web Start, что это хорошо и как он используется, например. Я сомневаюсь, что обычный пользователь Windows знает, как удалить приложение Java Web Start.

  2. Используйте exe-пусковую установку с манифестом для запуска приложения Java
    Насколько я понимаю это решение, exe-launcher запросит расширенное выполнение прямо при запуске приложения. Это не совсем то, что я хочу, потому что для моего случая использования было бы достаточно получить расширенные права, если обновление доступно, а не при каждом запуске приложения.

  3. Выполнение операции обновления путем вызова собственного исполняемого файла
    Можно вызвать собственный исполняемый файл, чтобы он мог выполнить операцию обновления. Таким образом, приложение будет запрашивать только расширенные права, если доступно обновление. Это звучит неплохо, но включает в себя некоторые собственные кодировки для Windows и не работает на других платформах.

  4. Установите пусковой в папке программы и приложение в пользовательском доме
    можно разместить пусковой в папке с программой, которая вызывает приложение, установленная в домашнем каталоге пользователя. Таким образом, можно будет обновить приложение в домашней папке пользователя. Я использую InnoSetup для установки моего приложения в Windows, и насколько я вижу, с этим установщиком сложно справиться с разделенной установкой и, возможно, с другими.

  5. Установка полного приложения в домашний каталог пользователя
    Поскольку пользователь имеет право на запись в свой домашний каталог, проблем нет. Для меня это выглядит как лучший вариант своей простоты.

+0

Проверьте это: http://stackoverflow.com/questions/4662574/how-do-i-elevate -my-uac-permissions-from-java – Xardas

+0

В другом вопросе вы спрашивали о JWS. Почему бы не установить это приложение. используя JWS? Он обеспечивает автоматическое обновление .. –

+2

Я был UAC, я бы заблокировал ваше приложение сразу и предотвратил его выполнение навсегда. Кто гарантирует, что вы не вводите вредоносные исполняемые файлы вместе с вашим, казалось бы, невиновным материалом Java? –

ответ

2

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

У меня была проблема, подобная этому несколько лет назад с Java-приложением, и в конце я установил приложение в папку данных пользователя вместо файлов программы, так как в противном случае автоматическое обновление было кошмаром. Вы можете добавить его в меню «Пуск», чтобы пользователь выглядел точно так же, как и любая другая программа.

+0

Что я не понимаю, так это то, что встроенная программа, такая как установщик, также запускается с правами пользователя, а затем, когда программа пытается для доступа к папке программы он получает права администратора, если пользователь подтверждает всплывающее окно безопасности. Поэтому, когда программа запускается, она делает> не <имеет увеличенное разрешение, но получает ее на лету. Где разница между, например, установщик и виртуальная машина Java? Оба являются родными программами для Windows и должны вести себя одинаково? – user2662314

+0

Я уже ответил, что. Это не так - программа установки перезагружается и запрашивает увеличенные разрешения при перезапуске. –

3

Если вы используете компилятор inno setup для создания вашей пусковой установки, вы можете изменить разрешение на использование своего приложения.

Например, если вам нужен полный контроль и хотите обновить файлы в папке/данных AppName

[Dirs] 
Name: "{app}"; 
Name: "{app}\data"; Permissions: everyone-full 

[Files] 
Source: data\*; DestDir: {app}\data\; Flags: ignoreversion recursesubdirs createallsubdirs; Permissions: everyone-full 
+0

Я рад видеть этот ответ здесь (поскольку я использую точно интро-настройку).Howerer этот ответ можно расширить для более общего использования: отредактируйте разрешения для своей папки приложения в файлах программы во время установки. – sinedsem

 Смежные вопросы

  • Нет связанных вопросов^_^