it-swarm-ja.com

runas.exe(Windows)を起動するプログラムが終了するまで待機させるにはどうすればよいですか?

つまり、runasを実行するプログラムが終了した後でのみ、runasを終了させたいのです。

Runas.exeには/wait引数はありません。 start /waitの順列をたくさん試しましたが、何も機能しません。

プログラムに昇格された特権が必要なため、runasを使用する必要があるため、次のように開始する必要があります。

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

ここで、update.exeは私のプログラムです。 runasは、Cygwin Bashからも呼び出され、さらに複雑になっています。

私はServer2008R2を使用しています。

まあ、これはそれを解決する一つの方法です。 Sysinternalspslistプログラムと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
}

ただし、主にプログラムの終了ステータスを呼び出し元に戻すことができないため、これはひどくハッキーです。それは大きな問題です、IMO。

6
e40

RunAsは、プロセスを昇格せず、ターゲットユーザーの資格情報を使用してプロセスを実行するだけです。ただし、これは昇格されたトークンを使用してプロセスを実行しません。あなたがルーンでやろうとしていることは不可能です。

これを行うには、PowerShell、VBScriptのいずれかを使用するか、Technetから Elevation PowerToys をダウンロードする必要があります。

編集:

たとえば、次のように入力します。

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

次に、管理者権限が必要なfsutilsを実行します。アクセスが拒否されました。

または試してみてください:

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

アクセスが拒否されました。

スクリプトの実行時にさまざまな問題が発生するため、これに気付いていないことに驚いています。スクリプトが他のスクリプトを起動し、そのスクリプトに昇格されたアクセス許可が必要な場合、スクリプトは機能しなくなります。これは、VBScriptおよびPowerShellスクリプトの問題でもあります。

2
surfasb