本帖最后由 xyx115 于 2018-4-19 21:13 编辑
感谢大家关注此帖。
应用场景:
公司域环境,普通用户没有权限安装一些软件(使用管理员权限安装的软件或者运行库)。
为了简化操作,让普通用户能够直接安装这些软件,决定使用AU3解决问题。
搜索后发现runas可以解决这类问题。
遇到问题:
使用如下代码,可以调用a.bat(这个a.bat里面写入了安装运行库的静默调用命令等),但是会弹出提权的窗口等待输入管理员账号和密码。
如果把中间的ShellExecute($soft, "", @ScriptDir & "\")改为$soft,则$soft不会被执行。Global $soft = @ScriptDir & "\a.bat"
Local $user = 'admin', $domo = 'domo', $pass = 'password'
If IsAdmin() Then
RunAsWait($user, $domo, $pass, 0, ShellExecute($soft, "", @ScriptDir & ""), @ScriptDir & "")
MsgBox(64, 0, '运行结束', 1)
Else
Local $pid = RunAs($user, $domo, $pass, 0, ShellExecute($soft, "", @ScriptDir & ""), @ScriptDir & "")
If $pid = 0 Then
MsgBox(48, 0, "获取权限失败,请联系管理员", 3)
Else
MsgBox(64, 0, '运行结束', 1)
EndIf
EndIf
在au3帮助文档中提到二次登录,但是不明白具体用法。
论坛中看遍了每一个关于runas的用法,都没有关于二次登录的问题。请各位大佬指教!
RunAsWait ( "用户名", "域", "密码", 登录, "程序" [, "工作目录" [, 显示 [, 选项 ]]] )
如果路径包含空格,必须添加英文引号.
必须指定当前用户能够访问的工作目录, 否则函数将失败.
建议只加载需要的用户配置文件. 在内存允许的情况下, 配置文件可以停留在内存中.
如果使用 RunAs() 的脚本正好在运行在系统帐户中(例如, 脚本作为一个服务在运行中),
并且加载了用户的配置文件, 则你必须注意使脚本继续运行, 直到子进程关闭.
以管理员方式运行, 必须激活二次登录( RunAs() )服务, 否则此函数将失败. 这并不适用于作为系统帐户运行.
执行指定程序后, 脚本会暂停, 直到该程序终止. 要运行程序后立即继续执行脚本, 则使用 RunAs() 函数代替.
一些程序运行时会立即出现返回, 即使他们仍然在运行, 这些程序会产生另一个进程. 可以使用 ProcessWaitClose() 函数来处理这些案例.
"加载配置文件"和"使用网络证书"选择是不兼容的. 同时使用会产生不确定的结果.
在 Windows XP 系统有一个防止工作顺序重定向和工作标志的问题. 请参阅 Microsoft 知识库文章 KB818858, 详细了解受到影响的版本, 以及为解决问题的修补程序.
用户运行 Windows XP SP2 及更高版本, 或 Windows Vista 或更高版本 不会受此影响. |