Хорошо, после некоторых исследований и экспериментов мне удалось частично решить мою проблему.
Во-первых, я проверяю, запущен ли пакетный скрипт с правами администратора:
fsutil dirty query %SYSTEMDRIVE% >nul
if %errorLevel% == 0 (
set isBatchElevated=true
) else (
set isBatchElevated=false
)
Затем я ищу конкретный процесс, получая список всех задач, запущенных текущим пользователем, и нахожу процесс по имени:
tasklist /fi "username eq %USERDOMAIN%\%USERNAME%" | find /i "processname" > nul
if errorlevel 1 (
:: batch script doesn't have admin privileges, but the process has
)
Итак, существует четыре возможных сценария запуска сценария и процесса с правами администратора или без них.
1) Пакетный скрипт без прав администратора, процесс с правами администратора
Запуск команды tasklist
не найдет данный процесс с повышенными правами и установит код выхода равным 1. Поэтому вы можете быть на 100% уверены, что процесс запущен с повышенными правами, но только если пакетный сценарий работает без прав администратора.
2) Пакетный скрипт без прав администратора, процесс без прав администратора
Выполнение команды tasklist
найдет данный процесс. Исходя из результата 1), вы можете быть на 100% уверены, что процесс запущен без повышенных привилегий, но только если пакетный скрипт запущен без прав администратора.
3) / 4) Пакетный скрипт с правами администратора, процесс с / без прав администратора
Это проблемные сценарии. Когда сценарий выполняется с повышенными привилегиями, данный процесс будет найден, но при выполнении tasklist
.
различий между процессами с повышенными правами и без них не будет.
После проверки привилегий мне нужно запустить программу с теми же правами, что и у данного процесса. Разница в привилегиях приведет к ошибке, и данные не будут работать без прав администратора, поэтому запуск пакетного скрипта без прав администратора не решит проблему.