redapple2008 发表于 2023-4-10 09:54:21

命令行窗口在win11下稳定执行

本帖最后由 redapple2008 于 2023-4-10 11:58 编辑



如上代码和思路,在win11下测试执行不稳定,有win11系统不能执行,谁帮忙测试一下,在win11上执行看看有没问题或者有更好的解决方案。

上面的sleep太多。对电脑的要求也能达到统一。

redapple2008 发表于 2023-4-10 11:47:25

zhaoceshi 发表于 2023-4-10 11:16
代码是要实现用管理员账号来安装搜狗输入法吗?

安装软件或者用管理员权限运行程序。两个功能。

redapple2008 发表于 2023-4-10 11:46:45

zhaoceshi 发表于 2023-4-10 11:34
不能直接使用autoit3自带的runas函数吗?另外有些软件可以查看下是否有静默参数,比如搜狗输入法就可以用 ...

这个自带的函数不好用,效果达不到。

redapple2008 发表于 2023-4-10 11:29:06

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("")

zghwelcome 发表于 2023-4-10 10:16:41

WinWaitActive拆分成WinWait、 WinActivate试试

redapple2008 发表于 2023-4-10 10:32:16

本帖最后由 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

zhaoceshi 发表于 2023-4-10 11:16:39

代码是要实现用管理员账号来安装搜狗输入法吗?

zhaoceshi 发表于 2023-4-10 11:34:32

redapple2008 发表于 2023-4-10 11:29
是,域用户是user权限,有些软件或安装软件需要管理员权限。在dos下用runas最稳定。手动操作没问题。所以 ...

不能直接使用autoit3自带的runas函数吗?另外有些软件可以查看下是否有静默参数,比如搜狗输入法就可以用/s来达到静默安装的效果。
RunAs("用户名", "域", "密码", 注册标志, "程序"[, "工作目录"[, 显示标志[, 选项标志]]])


zhaoceshi 发表于 2023-4-10 11:57:34

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

redapple2008 发表于 2023-4-10 11:59:32

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

redapple2008 发表于 2023-4-10 12:05:35

zhaoceshi 发表于 2023-4-10 11:57
不知道效果不好是什么意思,win11的cmd窗口的类和win10的窗口不一样,你试下下面的代码看看是否能跑起?
...

你这样写不能发送字符,需要我下面的写法。        ControlSend("", "", "", "D:\soft\PureCodec20230222.exe" & "{Enter}")

zhaoceshi 发表于 2023-4-10 12:10:24

你或者直接试下下面的代码是否能跑起来?

#RequireAdmin
Local $UserName = "admin" ;管理员名称
Local $PassWord = "redapple" ;管理员密码
RunAs($UserName,@ComputerName,$PassWord, 0, "D:\soft\PureCodec20230222.exe", "", @SW_SHOWMAXIMIZED)

redapple2008 发表于 2023-4-10 12:16:43

zhaoceshi 发表于 2023-4-10 12:10
你或者直接试下下面的代码是否能跑起来?

#RequireAdmin


不行,不好用。我试过的。多次测试

gyp2000 发表于 2023-4-10 14:58:55

win11下很多提权工具都不好用。AD域不是自带软件下发功能吗,而且可以指定管理员运行。

redapple2008 发表于 2023-4-10 17:15:10

gyp2000 发表于 2023-4-10 14:58
win11下很多提权工具都不好用。AD域不是自带软件下发功能吗,而且可以指定管理员运行。

是win11有点坑,我新建了两个管理员权限,一个弹出是win10界面,一个是弹出win11界面。
页: [1] 2
查看完整版本: 命令行窗口在win11下稳定执行