版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LeoForBest/article/details/85029849
准备工作
- lsrunas.exe
- autoit v3
- install.bat(模拟右键以管理员身份运行)
具体文件如下图
程序代码
提权.au3
#include <Misc.au3>
$dir = "c:\_autoit_tmp\"
; 修改为要提升权限运行的程序
$exe = "install.bat"
DirCreate($dir)
; 修改为要提升权限运行的程序
FileInstall("install.bat", $dir & $exe, 1)
FileInstall("lsrunas.exe", $dir & "lsrunas.exe", 1)
If _Singleton(@ScriptName, 1) = 0 Then
MsgBox(0, "警告", "当前已有该程序在运行,请耐心等候,勿重复点击!")
Exit
EndIf
$u = ""
$p = ""
$bSuccess = False
DetectAdministrator()
If $bSuccess Then
;以administrator身份调用$exe
;如果普通用户直接运行lsrunas.exe调用带有盾牌图标的程序会运行失败
;所以第一步先用lsrunas.exe以管理员身份启动一个cmd,并传入要调用的程序作为参数
;由该cmd再调用带盾牌的程序
$cmd = """" & @ComSpec & " /C " & $dir & $exe & """"
RunWait($dir & "lsrunas.exe /user:" & $u & " /password:" & $p & " /domain:. /command:" & $cmd & " /runpath:" & $dir, $dir, @SW_HIDE)
Else
MsgBox(0, "错误", "提升权限失败,可能原因:用户名密码不对/用户锁定/无法登陆/...!")
Exit
EndIf
Func DetectAdministrator()
; 如果要添加账号密码, 对应好账号密码位置,并修改数组数量
local Const $arrUsers[2] = ["Administrator", "Admin"]
local Const $arrPwds[2] = ["administratorpassword", "adminpassword"]
; 修改为 0 To 数组长度
For $i = 0 To 2
RunWait("cmd /c" & """lsrunas /user:" & $arrUsers[$i] & " /password:" & $arrPwds[$i] &" /domain:. /command:""cmd /C"" /runpath:.""" & " > log.txt", $dir, @SW_HIDE)
$ret = FileRead($dir & "log.txt")
If StringIsSpace($ret) <> 1 Then
ContinueLoop
Else
$u = $arrUsers[$i]
$p = $arrPwds[$i]
$bSuccess = True
ExitLoop
EndIf
Next
EndFunc
install.bat
@echo off
color 2
cd %~dp0
REM 提升权限,模拟右键以管理员身份运行
REM 主要针对Win8, 10系统, win7关闭UAC不受影响
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"
REM 此处开始填写你的代码
说明
如下图:
Win10
下普通用户使用lsrunas
模拟以Administrator
身份运行WeChatSetup.exe
会失败
需使用lsrunas
模拟以Administrator
身份运行cmd
, 由cmd
调用WeChatSetup.exe