java getRuntime (). exec исполняемый файл, который требует UAC

Итак, у нас есть Java-процесс, который работает как служба Windows. Ему нужно выполнить команду с Runtime.getRuntime().exec(command). Для выполняемой команды требуется UAC. Это на сервере Windows 2008, и похоже, что вы не можете отключить UAC для одного исполняемого файла, есть ли другой способ заставить эту работу?


person vinnyjames    schedule 12.04.2011    source источник
comment
похоже, что применение манифеста к исполняемому файлу может быть вариантом sourceforge .net / tracker / (нужно развернуть комментарии)   -  person vinnyjames    schedule 13.04.2011
comment
возможный дубликат Java: запускать от имени администратора - прочтите принятый ответ ...   -  person Stephen C    schedule 13.04.2011


Ответы (1)


Если ваше приложение Java работает как служба Windows, оно, скорее всего, работает под одной из системных учетных записей: SYSTEM (наиболее вероятно), LOCAL SERVICE или NETWORK SERVICE. Таким образом, если служба работает под учетной записью SYSTEM, все, что вы запускаете из службы, унаследует учетную запись. В любом случае вашей службе должно быть разрешено взаимодействие с Desktop.

Подводя итог, если ваш процесс выполняется с повышенными правами, то процессы, запущенные с него, также будут выполняться с повышенными правами.


Для повышения вы должны использовать ShellExecute или Функции ShellExecuteEx Windows API. Если .exe, который вы запускаете, помечен level=requireAdministrator в своем манифесте, оболочка отобразит диалоговое окно UAC. Если он не отмечен, вы можете использовать runas глагол / операцию, чтобы вызвать диалог подтверждения UAC. Примечание. runas в Windows XP отобразит диалоговое окно «Запуск от имени другого пользователя».

Если Runtime.getRuntime().exec(command) реализован через ShellExecute, то пометка .exe соответствующим манифестом будет работать; если exec использует CreateProcess, процесс будет запущен с текущими правами пользователя, т.е. без повышенных прав; более того, процесс не будет запущен вообще, если в манифесте .exe есть requireAdministrator.

person Alexey Ivanov    schedule 13.04.2011
comment
спасибо Алексей, я думаю, что exe, в частности (patch.exe из UnxUtils), не имеет определенного манифеста. Использование patch.exe из cygwin не вызывает всплывающее окно UAC (или сбой с отказом в разрешении), поэтому я предполагаю, что это так. - person vinnyjames; 13.04.2011
comment
@vinnyjames Рад, что это помогло. Вы можете проверить манифест, просмотрев файл .exe. В случае cygwin, я думаю, вы можете добавить к нему манифест, если он поможет. - person Alexey Ivanov; 14.04.2011
comment
да, еще раз спасибо. какой инструмент вы используете для просмотра манифеста UAC исполняемого файла? - person vinnyjames; 14.04.2011
comment
Блокнот @vinnyjames подойдет (но он медленный, если .exe большой); Пользуюсь Far Manager. Затем просто найдите манифест - если он там, вы увидите XML. - person Alexey Ivanov; 14.04.2011