![我怎样才能让 runas.exe(Windows)等到它启动的程序退出?](https://linux22.com/image/1283655/%E6%88%91%E6%80%8E%E6%A0%B7%E6%89%8D%E8%83%BD%E8%AE%A9%20runas.exe%EF%BC%88Windows%EF%BC%89%E7%AD%89%E5%88%B0%E5%AE%83%E5%90%AF%E5%8A%A8%E7%9A%84%E7%A8%8B%E5%BA%8F%E9%80%80%E5%87%BA%EF%BC%9F.png)
也就是说,我希望 runas 仅在其运行的程序退出后才退出。
/wait
runas.exe没有参数。我尝试了很多种排列组合start /wait
,但都不起作用。
我必须使用,runas
因为我需要提升该程序的权限,所以我需要像这样启动它:
runas /user:administrator /savedcred /env update.exe
update.exe
我的程序在哪里。runas
也被 Cygwin Bash 调用,这使其变得更加复杂。
我在使用 Server 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 确实不提升进程,但仅使用目标用户凭据运行该进程。但这不会使用提升的令牌运行该进程。您尝试使用 Runas 执行的操作是不可能的。
为此,您需要使用 PowerShell、VBScript 或下载海拔 PowerToys来自 Technet。
编辑:
例如,输入:
runas /user:<i>Workadmin</i> cmd
然后运行 fsutils,它需要管理员权限;访问被拒绝。
或者尝试:
runas /user:<i>workadmin</i> "mmc.exe gpedit.msc"
拒绝访问。
我很惊讶你没有注意到这一点,因为它会在运行脚本时导致各种问题。如果脚本启动其他脚本,而这些脚本又需要提升权限,那么它就会中断。这也是 VBScript 和 PowerShell 脚本的一个问题。