我怎样才能让 runas.exe(Windows)等到它启动的程序退出?

我怎样才能让 runas.exe(Windows)等到它启动的程序退出?

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

/waitrunas.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 脚本的一个问题。

相关内容