Как я могу заставить runas.exe (Windows) ждать, пока не запустится программа, которая запускается?
То есть я хочу, чтобы runas выходил только после завершения работающей программы.
Здесь нет /wait
Аргумент к runas.exe. Я пробовал много перестановок 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 ответ
RunAs не повышает уровень процесса, а просто запускает процесс с учетными данными целевого пользователя. Но это не запускает процесс с повышенным токеном. То, что вы пытаетесь сделать с Рунасом, невозможно.
Для этого вам нужно использовать PowerShell, VBScript или загрузить Elevation PowerToys из Technet.
Редактировать:
Например, введите:
runas /user:<i>Workadmin</i> cmd
Затем запустите fsutils, который требует прав администратора; доступ закрыт.
Или попробуйте:
runas /user:<i>workadmin</i> "mmc.exe gpedit.msc"
Доступ закрыт.
Я удивлен, что вы этого не заметили, потому что это вызывает всевозможные проблемы при запуске скриптов. Если сценарии запускают другие сценарии, для которых затем требуются повышенные разрешения, то они будут прерываться. Это также проблема с сценариями VBScripts и PowerShell.