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]]] )
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". |
Succès: | Retourne le code de sortie du programme qui a été exécuté. |
Échec: | Définit @error <> 0. |
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.
ProcessWait, ProcessWaitClose, Run, RunAs, RunWait, ShellExecute, ShellExecuteWait
#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