5

То есть я хочу, чтобы runas выходил только после того, как запускается запущенная программа.

Для runas.exe отсутствует аргумент /wait . Я пробовал много перестановок start /wait с ним, и ничего не работает.

Я должен использовать runas потому что мне нужны повышенные привилегии для программы, поэтому мне нужно запустить ее так:

runas /user:administrator /savedcred /env update.exe

где update.exe - моя программа. runas вызывается из Cygwin Bash, чтобы сделать его еще более сложным.

Я на сервере 2008 R2.

Ну, это один из способов ее решения. Он использует программу Sysinternals pslist и Bash:

do_update()
{
if test -d c:/; then
    case `hostname` in
    thor*)
        update="runas /user:administrator /savedcred /env \".\\update.exe\""
        ;;
        *)  update="./update.exe" ;;
    esac
    $update
    while pslist -e update > /dev/null 2>&1; do
        echo waiting for update.exe to finish...
    sleep 3
    done
else
    ./update.sh
fi
}

Однако он ужасно хакерский, в основном потому, что не может вернуть статус завершения программы вызывающей стороне. Это огромная проблема, ИМО.

1 ответ1

2

RunAs не повышает уровень процесса, а просто запускает процесс с учетными данными целевого пользователя. Но это не запускает процесс с повышенным токеном. То, что вы пытаетесь сделать с Рунасом, невозможно.

Для этого вам нужно использовать PowerShell, VBScript или загрузить Elevation PowerToys из Technet.

Редактировать:

Например, введите:

runas /user:<i>Workadmin</i> cmd

Затем запустите fsutils, который требует прав администратора; доступ закрыт.

Или попробуйте:

runas /user:<i>workadmin</i> "mmc.exe gpedit.msc"

Доступ закрыт.

Я удивлен, что вы этого не заметили, потому что это вызывает всевозможные проблемы при запуске скриптов. Если сценарии запускают другие сценарии, для которых затем требуются повышенные разрешения, то они будут прерываться. Это также проблема с сценариями VBScripts и PowerShell.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .