AutoIt以其他用户身份运行程序

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

盾牌

猜你喜欢

转载自blog.csdn.net/LeoForBest/article/details/85029849