Functions > Process >


RunAsWait

Exécute un programme externe dans le contexte d'un utilisateur différent et interrompt l'exécution du script jusqu'à ce que le programme se termine.

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

Paramètres

username Le nom de l'utilisateur avec lequel se connecter.
domain Le domaine pour s'authentifier.
password Le mot de passe de l'utilisateur.
logon_flag     $RUN_LOGON_NOPROFILE (0) - Ouverture de session interactive avec aucun profil.
    $RUN_LOGON_PROFILE (1) - Ouverture de session interactive avec un profil.
    $RUN_LOGON_NETWORK (2) - Identification réseau uniquement.
    $RUN_LOGON_INHERIT (4) - Hériter l'environnement du processus appelant à la place de l'environnement de l'utilisateur.

Les constantes sont définies dans "AutoItConstants.au3".
program Le chemin d'accès complet du programme (EXE, BAT, COM, ou PIF) à exécuter (Voir Remarques).
workingdir [optionnel] Le répertoire de travail. S'il n'est pas spécifié, la valeur de SystemDir sera utilisée. Ce n'est pas le chemin du programme.
show_flag [optionnel] Le flag "mode d'affichage" du programme exécuté:
    @SW_HIDE = Fenêtre cachée (ou mot-clé Default)
    @SW_MINIMIZE = Fenêtre réduite
    @SW_MAXIMIZE = Fenêtre maximisée
opt_flag [optionnel] Options diverses liées à la façon dont les processus parent-enfant inter-agissent.
    $RUN_CREATE_NEW_CONSOLE (0x10000) = Le processus console enfant doit être créé avec sa propre fenêtre au lieu d'utiliser la fenêtre du parent. Ce flag n'est utile que lorsque le parent est compilé comme une application Console.

La constante est définie dans "AutoItConstants.au3".

Valeur de retour

Succès: Retourne le code de sortie du programme qui a été exécuté.
Échec: Définit @error <> 0.

Remarques

Les chemins avec des espaces doivent être placés entre guillemets.

Il est important de spécifier un répertoire de travail accessible par l'utilisateur sur lequel vous exécutez le programme, sinon la fonction échouera.

Il est recommandé que vous ne chargiez le profil de l'utilisateur que si vous êtes sûr que vous en avez besoin. Il y a une petite chance qu'un profil soit bloqué en mémoire dans de bonnes conditions. Si un script qui exécute RunAs() arrive à être exécuté sous le compte SYSTEM (par exemple, si le script est exécuté en tant que service) et que le profil de l'utilisateur est chargé, vous devez veiller à ce que le script continue de s'exécuter jusqu'à ce que le processus enfant se termine.

Lors de l'exécution en tant qu'administrateur, le service de connexion secondaire (RunAs()) doit être activé ou cette fonction échouera. Ceci ne s'applique pas lors de l'exécution sous le compte SYSTEM.

Après avoir lancé le programme demandé le script se met en pause jusqu'à la fin du programme. Pour exécuter un programme puis continuer immédiatement l'exécution de script, utiliser la fonction RunAs() à la place.

Certains programmes semble retourner immédiatement, même s'ils sont encore en cours d'exécution; ces programmes engendrent un autre processus - vous devrez utiliser la fonction ProcessWaitClose() pour traiter ce cas.

Les options "charge un profil" et "informations réseau seules" sont incompatibles. Les utiliser ensemble provoquera des résultats indéfinis.

Il y a un problème avec la génération des Windows XP qui empêche la redirection STDIO et le drapeau "mode d'affichage" de fonctionner. Consultez l'article de la Base de connaissances Microsoft KB818858 pour plus d'informations sur les versions concernées ainsi que d'un correctif pour ce problème. Les utilisateurs de Windows XP SP2 ou plus, ou Windows Vista ou plus ne sont pas concernés.

En relation

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

Exemple

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

Example()

Func Example()
    ; Change le nom d'utilisateur et le mot de passe pour des valeurs appropriées à votre système.
    Local $sUserName = "Username"
    Local $sPassword = "Password"

    ; Lance le Bloc-notes et attend que le processus du Bloc-notes se ferme. Le Bloc-notes est exécuté sous l'utilisateur spécifié.
    Local $iReturn = RunAsWait($sUserName, @ComputerName, $sPassword, $RUN_LOGON_NOPROFILE, "notepad.exe")

    If @error Then
        Local $sLastError = _WinAPI_GetLastErrorMessage()
        MsgBox($MB_SYSTEMMODAL + $MB_ICONERROR, "Erreur", "Notepad ne s'est pas exécuté :" & @CRLF & @CRLF & $sLastError)
    Else
        ; Affiche le code de retour du processus Notepad.
        MsgBox($MB_SYSTEMMODAL, "", "Le code de retour de Notepad était: " & $iReturn)
    EndIf
EndFunc   ;==>Example