How can I make runas.exe (Windows) wait until the program it starts exits?

6

4

That is, I want runas to exit only after the program that it runs exits.

There is no /wait argument to runas.exe. I've tried lots of permutations of start /wait with it and nothing works.

I have to use runas because I need elevated privileges for the program, so I need to start it like this:

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

where update.exe is my program. runas is being called from a Cygwin Bash, as well, to make it even more complicated.

I'm on Server 2008 R2.

Well, this is one way to solve it. It uses the Sysinternals pslist program and 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
}

It is horribly hacky, though, mainly because it cannot get the exit status of the program back to the caller. That is a huge problem, IMO.

e40

Posted 2011-07-20T18:58:39.740

Reputation: 1 143

What do you mean for program to be started? There is process allocated etc, ready to receive windows messages, has a window showing, etc. There are different levels of "started". – earlNameless – 2011-07-20T19:09:50.003

Perhaps I should have said "wait for it to finish". I want runas to return when the program finishes. – e40 – 2011-07-20T19:11:07.483

Elevated privileges should persist through a programs run time regardless of whether or not RunAs is still running. Are you experiencing specific issues that seem to indicate otherwise? If so, please detail. – music2myear – 2011-07-20T19:16:28.090

Did you tried using cmd /wait runas -"arg..." ????? – Diogo – 2011-07-20T19:17:27.270

cmd /wait ... doesn't work because runas itself exits immediately. – e40 – 2011-07-20T19:18:27.340

@music2myear The issue isn't with the elevation. It's with the waiting. – e40 – 2011-07-20T19:18:58.650

What is NOT working? What is it not doing that you want it to do (meaning update.exe)? – KCotreau – 2011-07-20T19:26:53.107

@KCotreau It is not waiting. – e40 – 2011-07-20T19:40:36.633

Answers

2

RunAs does not elevate a process, but merely runs the process with target user credentials. But this does not run the process with an elevated token. What you are trying to do with Runas is impossible.

To do this, you need to use either PowerShell, VBScript or download the Elevation PowerToys from Technet.

Edit:

For example, type:

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

Then run fsutils, which requires administrator privileges; access denied.

Or try:

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

Access denied.

I'm surprised you haven't noticed this because it causes all sorts of issues when running scripts. If scripts launch other scripts which then requires elevated permissions, then it will break. This is also an issue with VBScripts and PowerShell scripts.

surfasb

Posted 2011-07-20T18:58:39.740

Reputation: 21 453

Are you sure? By running under the context of a user with the credentials you need, it gives the process elevated status - I use this frequently :/ – William Hilsum – 2011-08-12T10:04:11.267

2008 R2 has UAC. If UAC is off, then yes. If it is on, then you are wrong. – surfasb – 2011-08-12T10:05:26.627

I agree with William. I use this all the time and get elevated status and UAC is on. – e40 – 2011-09-04T17:32:57.337

Ah nm. You are using the builtin Admin account. The built Admin account has auto-elevate on by default. It is off on my machine and I just assumed it was off by default on the Server editions. – surfasb – 2011-09-04T20:23:13.267