命令行窗口在win11下稳定执行
本帖最后由 redapple2008 于 2023-4-10 11:58 编辑如上代码和思路,在win11下测试执行不稳定,有win11系统不能执行,谁帮忙测试一下,在win11上执行看看有没问题或者有更好的解决方案。
上面的sleep太多。对电脑的要求也能达到统一。
zhaoceshi 发表于 2023-4-10 11:16
代码是要实现用管理员账号来安装搜狗输入法吗?
安装软件或者用管理员权限运行程序。两个功能。 zhaoceshi 发表于 2023-4-10 11:34
不能直接使用autoit3自带的runas函数吗?另外有些软件可以查看下是否有静默参数,比如搜狗输入法就可以用 ...
这个自带的函数不好用,效果达不到。 zhaoceshi 发表于 2023-4-10 11:16
代码是要实现用管理员账号来安装搜狗输入法吗?
是,域用户是user权限,有些软件或安装软件需要管理员权限。在dos下用runas最稳定。手动操作没问题。所以想模拟手工操作达到自动化。
Local $UserName = "red" ;管理员名称
Local $PassWord = "redapple" ;管理员密码
Send("#r")
WinWaitActive("")
Local $flag = ControlSend("", "", "", "cmd.exe" & "{Enter}")
Sleep(2300)
Local $sdoscommand = "runas /user:" & $UserName & " " & "cmd.exe"
WinActivate("")
Local $flag = ControlSend("", "", "", $sdoscommand & "{Enter}")
Sleep(1300)
ControlSend("", "", "", $PassWord & "{Enter}")
Sleep(300)
WinClose("")
Sleep(2300)
If WinExists("") Then ControlSend("", "", "", "D:\soft\PureCodec20230222.exe" & "{Enter}")
If WinExists("") Then ControlSend("", "", "", "D:\soft\PureCodec20230222.exe" & "{Enter}")
Sleep(2300)
WinClose("")
WinClose("") WinWaitActive拆分成WinWait、 WinActivate试试 本帖最后由 redapple2008 于 2023-4-10 10:36 编辑
zghwelcome 发表于 2023-4-10 10:16
WinWaitActive拆分成WinWait、 WinActivate试试
Global $class
Local $UserName = "red" ;管理员名称
Local $PassWord = "redapple" ;管理员密码
Send("#r")
WinWaitActive("")
Local $sdoscommand = "runas /user:" & $UserName & " " & "D:\sogou_pinyin_79c.exe"
Local $flag = ControlSend("", "", "", $sdoscommand & "{Enter}")
If $flag Then
Sleep(300)
If WinExists("") Then _dos("")
If WinExists("") Then _dos("")
EndIf
Func _dos($class)
WinWait($class)
WinActive($class)
$flag = ControlSend($class, "", "", $PassWord & "{Enter}")
If $flag Then
Sleep(300)
WinClose($class)
Else
MsgBox(0, "", "")
EndIf
EndFunc ;==>_dos 代码是要实现用管理员账号来安装搜狗输入法吗? redapple2008 发表于 2023-4-10 11:29
是,域用户是user权限,有些软件或安装软件需要管理员权限。在dos下用runas最稳定。手动操作没问题。所以 ...
不能直接使用autoit3自带的runas函数吗?另外有些软件可以查看下是否有静默参数,比如搜狗输入法就可以用/s来达到静默安装的效果。
RunAs("用户名", "域", "密码", 注册标志, "程序"[, "工作目录"[, 显示标志[, 选项标志]]])
redapple2008 发表于 2023-4-10 11:47
安装软件或者用管理员权限运行程序。两个功能。
不知道效果不好是什么意思,win11的cmd窗口的类和win10的窗口不一样,你试下下面的代码看看是否能跑起?
Global $class
Local $UserName = "red" ;管理员名称
Local $PassWord = "redapple" ;管理员密码
Send("#r")
WinWaitActive("")
Local $sdoscommand = "runas /user:" & $UserName & " " & "D:\sogou_pinyin_79c.exe"
Local $flag = ControlSend("", "", "", $sdoscommand & "{Enter}")
If $flag Then
Sleep(300)
If WinExists("") Then _dos("")
If WinExists("") Then _dos("");win11终端窗口
EndIf
Func _dos($class)
WinWait($class)
WinActive($class)
$flag = ControlSend($class, "", "", $PassWord & "{Enter}")
If $flag Then
Sleep(300)
WinClose($class)
Else
MsgBox(0, "", "")
EndIf
EndFunc ;==>_dos zhaoceshi 发表于 2023-4-10 11:57
不知道效果不好是什么意思,win11的cmd窗口的类和win10的窗口不一样,你试下下面的代码看看是否能跑起?
...我这个可以跑起来,sleep太多,不稳定。
Local $UserName = "red" ;管理员名称
Local $PassWord = "redapple" ;管理员密码
Send("#r")
WinWaitActive("")
Local $flag = ControlSend("", "", "", "cmd.exe" & "{Enter}")
Sleep(2300)
Local $sdoscommand = "runas /user:" & $UserName & " " & "cmd.exe"
WinWaitActive("")
ControlSend("", "", "", $sdoscommand & "{Enter}")
Sleep(300)
ControlSend("", "", "", $PassWord & "{Enter}")
Sleep(300)
WinClose("")
Sleep(2300)
If WinExists("") Then
ControlSend("", "", "", "D:\soft\PureCodec20230222.exe" & "{Enter}")
Sleep(2300)
WinClose("")
EndIf
If WinExists("") Then
ControlSend("", "", "", "D:\soft\PureCodec20230222.exe" & "{Enter}")
Sleep(2300)
WinClose("")
EndIf zhaoceshi 发表于 2023-4-10 11:57
不知道效果不好是什么意思,win11的cmd窗口的类和win10的窗口不一样,你试下下面的代码看看是否能跑起?
...
你这样写不能发送字符,需要我下面的写法。 ControlSend("", "", "", "D:\soft\PureCodec20230222.exe" & "{Enter}") 你或者直接试下下面的代码是否能跑起来?
#RequireAdmin
Local $UserName = "admin" ;管理员名称
Local $PassWord = "redapple" ;管理员密码
RunAs($UserName,@ComputerName,$PassWord, 0, "D:\soft\PureCodec20230222.exe", "", @SW_SHOWMAXIMIZED)
zhaoceshi 发表于 2023-4-10 12:10
你或者直接试下下面的代码是否能跑起来?
#RequireAdmin
不行,不好用。我试过的。多次测试 win11下很多提权工具都不好用。AD域不是自带软件下发功能吗,而且可以指定管理员运行。 gyp2000 发表于 2023-4-10 14:58
win11下很多提权工具都不好用。AD域不是自带软件下发功能吗,而且可以指定管理员运行。
是win11有点坑,我新建了两个管理员权限,一个弹出是win10界面,一个是弹出win11界面。
页:
[1]
2