RunAs

首页  后退  前进

RunAs
down2

RunAs

使用不同的用户环境运行外部程序文件.

 

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

参数

username

工作的用户名

domain

验证的域

password

用户的密码

logon_flag

   $RUN_LOGON_NOPROFILE (0) - 不加载配置文件的交互式登录.

   $RUN_LOGON_PROFILE (1) - 加载配置文件的交互式登录.

   $RUN_LOGON_NETWORK (2) - 使用网络证书.

   $RUN_LOGON_INHERIT (4) - 继承调用进程的环境, 而不是用户环境.

 

常量定义在 "AutoItConstants.au3"

program

运行程序的完整路径(文件类型: EXE, BAT, COM, 或 PIF, 见备注).

workingdir

[可选] 工作目录. 如果不指定, 则使用 @SystemDir. 这个路径不是程序的路径.

show_flag

[可选] 程序执行时的显示状态:

@SW_HIDE = 隐藏窗口 (或使用关键字 Default)

@SW_MINIMIZE = 最小化窗口

@SW_MAXIMIZE = 最大化窗口

opt_flag

[可选] 控制父进程与子进程互动.

   $STDIN_CHILD (0x1) = 提供句柄到子进程的 STDIN 流

   $STDOUT_CHILD (0x2) = 提供句柄到子进程的 STDOUT 流

   $STDERR_CHILD (0x4) = 提供句柄到子进程的 STDERR 流

   $STDERR_MERGED (0x8) = 为 STDOUT 与 STDERR 提供相同的句柄. 也就是 $STDOUT_CHILD 与 $STDERR_CHILD 标志.

   $STDIO_INHERIT_PARENT (0x10) = 提供子和父的 STDIO 流. 这个标志不能和任何其它 STDIO 标志结合. 当父层作为控制台应用被编译时, 这个标志非常有用.

   $RUN_CREATE_NEW_CONSOLE (0x10000) = 子控制台进程应设立自己的窗口, 而不是使用父窗口. 当父层作为控制台应用被编译时, 这个标志非常有用.

 

常量定义在 AutoItConstants.au3

返回值

成功:

返回运行程序的 PID(进程标识符).

失败:

返回 0, @error 被设置为非 0 值.

备注

如果路径包含空格,必须添加英文引号.

 

必须指定当前用户能够访问的工作目录, 否则函数将失败.

 

建议只加载需要的用户配置文件. 在内存允许的情况下, 配置文件可以停留在内存中.

如果使用 RunAs() 的脚本正好在运行在系统帐户中(例如, 脚本作为一个服务在运行中),

并且加载了用户的配置文件, 则你必须注意使脚本继续运行, 直到子进程关闭.

 

以管理员方式运行, 必须激活二次登录(RunAs()) 服务, 否则此函数将失败. 这并不适用于作为系统帐户运行.

 

程序运行后脚本将继续执行后面的语句. 要暂停脚本的执行, 直到程序完成, 请使用 RunAsWait() 函数代替.

 

提供 StderrRead(), StdinWrite()StdoutRead() 函数的标准 I/O 参数与正确的特征值, 可以与子进程互动.

结合标志值(或使用 $STDERR_CHILD, $STDIN_CHILD & $STDOUT_CHILD, 由 Constants.au3 文件定义) 管理多个数据流.

 

使流关闭, 必须满足以下条件:

1) 子进程结束则关闭流(这种情况发生在子进程关闭时).

 

2) AutoIt 必须读出任何被捕获的流, 直到没有更多的数据存在.

 

3) 如果为子进程提供了 STDIN 流, 必须调用 StdinWrite() 关闭该流. 一旦检测到所有不再需要的流, 将自动释放所有内部资源.

 

StdioClose() 可用于强制关闭 STDIO 流.

 

"加载配置文件"和"使用网络证书"选择是不兼容的. 同时使用会产生不确定的结果.

 

在 Windows XP 系统有一个防止工作顺序重定向和工作标志的问题. 请参阅 Microsoft 知识库文章 KB818858, 详细了解受到影响的版本, 以及为解决问题的修补程序.

用户运行 Windows XP SP2 及更高版本, 或 Windows Vista 或更高版本系统 不会受此影响.

 

函数示例

#include <AutoItConstants.au3>
Example()
Func Example()
    ; Change the username and password to the appropriate values for your system.
    Local $sUserName = "Username"
    Local $sPassword = "Password"
    ; Run Notepad with the window maximized. Notepad is run under the user previously specified.
    Local $iPID = RunAs($sUserName, @ComputerName, $sPassword, $RUN_LOGON_NOPROFILE, "notepad.exe", "", @SW_SHOWMAXIMIZED)
    ; Wait 10 seconds for the Notepad window to appear.
    WinWait("[CLASS:Notepad]", "", 10)
    ; Wait for 2 seconds.
    Sleep(2000)
    ; Close the Notepad process using the PID returned by RunAs.
    ProcessClose($iPID)
EndFunc   ;==>Example

----------------------------------------

 

该函数可以通过命令调用 exect

参见:

Run, RunWait, RunAsWait, ShellExecute, ShellExecuteWait, ProcessClose

例子
copy

exect=RunAs('Username',@ComputerName,'Password',0,'notepad.exe','',@SW_SHOWMAXIMIZED) ;; 以全屏模式启动记事本,代表上述用户

up2

tcimage © Аверин Андрей для Total Commander Image Averin-And@yandex.ru