Funktionreferenz


RunAsWait

Beschreibung anzeigen in

Startet ein externes Programm im Kontext eines anderen Benutzers und pausiert das Skript, bis das Programm beendet wurde.

RunAsWait ( "username", "domain", "password", logon_flag, "program" [, "workingdir" [, show_flag [, opt_flag]]] )

Parameter

username Benutzername, mit dem eingeloggt wird.
domain Domäne, gegenüber der man sich authentifiziert.
password Passwort des Benutzers.
logon_flag     $RUN_LOGON_NOPROFILE (0) - Interaktives Logon ohne Profil.
    $RUN_LOGON_PROFILE (1) - Interaktives Logon mit Profil.
    $RUN_LOGON_NETWORK (2) - Nur Netzwerk-Authentifizierung.
    $RUN_LOGON_INHERIT (4) - Übernehme die Umgebung des aufrufenden Prozesses statt der Umgebung des Benutzers.

Die Konstanten sind in "AutoItConstants.au3" definiert.
program Name der ausführbaren Datei (EXE, BAT, COM oder PIF), die gestartet werden soll.
workingdir [optional] Arbeitsverzeichnis. Wenn nicht angegeben, wird @SystemDir verwendet. Dies ist nicht der Pfad des Programms.
show_flag [optional] Legt die Sichtbarkeit des ausgeführten Programms fest:
    @SW_HIDE = Verstecktes Fenster (benutzt alternativ das Schlüsselwort Default).
    @SW_MINIMIZE = Minimiertes Fenster.
    @SW_MAXIMIZE = Maximiertes Fenster.
opt_flag [optional] Steuert die Interaktion zwischen Parent- und Child-Prozess.
    $RUN_CREATE_NEW_CONSOLE (0x10000) = Der Child-Kommandozeilenprozess wird in einem eigenen Kommandozeilenfenster ausgeführt. Dieses Flag ist nur dann sinnvoll, wenn die Parent-Anwendung als Kommandozeilenapplikation kompiliert wurde.

Konstante ist in "AutoItConstants.au3" definiert.

Rückgabewert

Erfolg: Der Exit-Code des beendeten Programms.
Fehler: 0 und setzt das @error Flag auf ungleich null.

Bemerkungen

Pfade mit Leerzeichen müssen in Anführungszeichen gesetzt werden.

Es ist wichtig, ein Arbeitsverzeichnis anzugeben, für den der Benutzer Zugriffsrechte hat, in dessen Kontext der Prozess ausgeführt wird, anderenfalls schlägt der Aufruf der Funktion RunAs() fehl.

Es ist empfehlenswert, nur dann das "fremde" Benutzerprofil zu verwenden, wenn es auch wirklich benötigt wird. Es besteht eine geringe Wahrscheinlichkeit, dass das Profil unter bestimmten Bedingungen im Speicher hängen bleibt. Wenn ein Skript RunAs() benutzt, um einen Prozess unter dem SYSTEM-Account zu starten (z.B. um als Dienst zu fungieren), und ein Benutzerprofil ist aktiv, muss dafür gesorgt werden, dass das Skript nicht beendet wird, bevor der Child-Prozess geschlossen wurde.

Wenn man als Administrator angemeldet ist, muss der Service 'Sekundäre Anmeldung' (RunAs()) aktiv sein, sonst schlägt die Funktion fehl. Dies gilt nicht, wenn das SYSTEM-Konto aktiv ist.

Nach dem Start des angeforderten Programms pausiert das Skript, bis das gestartete Programm beendet wurde. Soll die Ausführung des Skripts fortgesetzt werden, so ist statt der RunAsWait-Funktion die RunAs() Funktion zu verwenden.

Manche Programme scheinen beendet zu sein, obwohl sie noch ausgeführt werden. Diese Programme erzeugen neue Prozesse - in diesen Fällen kann die Funktion ProcessWaitClose() verwendet werden, um auf das Ende dieser Prozesse zu warten.

Die 'logon_flags' mit Profil (0 oder 1) und Netzwerk-Authentifizierung (2) sind inkompatibel. Wenn beide in Kombination benutzt werden, kann das zu unvorhersehbaren Ergebnissen führen!

Aufgrund eines Problems, das Windows XP mit der Fenstererzeugung hat, kann die STDIO-Umleitung und Steuerung der Sichtbarkeit blockiert werden (siehe den Microsoft Knowledge Base Artikel KB818858 für weitere Informationen darüber, welche Versionen betroffen sind und wie das Problem umgangen werden kann). Benutzer von Windows XP SP2 (oder später) oder Windows Vista (oder später) sind nicht betroffen.

Verwandte Funktionen

ProcessWait, ProcessWaitClose, Run, RunAs, RunWait, ShellExecute, ShellExecuteWait

Beispiel

#include <AutoItConstants.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIError.au3>

Example()

Func Example()
    ; Hier den Benutzername und Passwort eingeben, die dem System entsprechen.
    Local $sUserName = "Username"
    Local $sPassword = "Password"

    ; Startet den Editor und wartet bis der Prozess nicht mehr existiert. Der Editor läuft unter dem obigen Benutzer.
    Local $iReturn = RunAsWait($sUserName, @ComputerName, $sPassword, $RUN_LOGON_NOPROFILE, "notepad.exe")

    If @error Then
        Local $sLastError = _WinAPI_GetLastErrorMessage()
        MsgBox($MB_SYSTEMMODAL + $MB_ICONERROR, "Fehler", "Der Editor wurde nicht gestartet :" & @CRLF & @CRLF & $sLastError)
    Else
        ; Zeigt den Rückgabewert des Editorprozesses an.
        MsgBox($MB_SYSTEMMODAL, "", "Der Rückgabecode des Editors lautete: " & $iReturn)
    EndIf
EndFunc   ;==>Example