如何让 runas.exe (Windows) 等到它启动的程序退出?

e40*_*e40 6 windows runas

也就是说,我希望 runas 只有在它运行的程序退出后才退出。

/waitrunas.exe没有参数。我已经尝试了很多排列,start /wait但没有任何效果。

我必须使用,runas因为我需要提升程序的权限,所以我需要像这样启动它:

runas /user:administrator /savedcred /env update.exe
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)

但是,它非常糟糕,主要是因为它无法将程序的退出状态返回给调用者。这是一个巨大的问题,IMO。

sur*_*asb 0

RunAs 不会提升进程,而只是使用目标用户凭据运行进程。但这不会使用提升的令牌运行该进程。你想用鲁纳斯做的事是不可能的。

为此,您需要使用 PowerShell、VBScript 或从 Technet下载Elevation PowerToys 。

编辑:

例如,输入:

runas /user:<i>Workadmin</i> cmd
Run Code Online (Sandbox Code Playgroud)

然后运行fsutils,需要管理员权限;拒绝访问。

或者尝试:

runas /user:<i>workadmin</i> "mmc.exe gpedit.msc"
Run Code Online (Sandbox Code Playgroud)

拒绝访问。

我很惊讶您没有注意到这一点,因为它在运行脚本时会导致各种问题。如果脚本启动其他需要提升权限的脚本,那么它就会中断。这也是 VBScript 和 PowerShell 脚本的问题。