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