Board logo

标题: [系统相关] [已解决]VBS隐藏启动bat,bat自动获取管理员则隐藏失效,怎么解决 [打印本页]

作者: hentai87    时间: 2019-3-5 21:36     标题: [已解决]VBS隐藏启动bat,bat自动获取管理员则隐藏失效,怎么解决

VBS隐藏启动bat,bat自动获取管理员则隐藏失效,怎么解决

VBS:
  1. CreateObject("WScript.Shell").Run "1.bat",0
复制代码
bat加入以下代码自动获取管理员,cmd会启动2次,用VBS隐藏bat只会隐藏第一次的黑色窗口
bat:
  1. cd /d %~dp0
  2. %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
复制代码

作者: WHY    时间: 2019-3-5 23:13

先用 vbs 获取管理员权限,vbs 调用的 bat 也就以管理员身份运行了。
Test.vbs
  1. If WSH.Arguments.Count = 0 Then
  2.     CreateObject("Shell.Application").ShellExecute "WScript.exe", chr(34) & WSH.ScriptFullName&chr(34) & " arg",, "runas", 1
  3.     WSH.Quit
  4. End If
  5. bat = Left(WSH.ScriptFullName, InStrRev(WSH.ScriptFullName,"\")) & "1.bat"
  6. CreateObject("WScript.Shell").Run chr(34) & bat & chr(34), 0
复制代码

作者: zaqmlp    时间: 2019-3-5 23:43

shellexecute的最后一个参数也可以隐藏
作者: ivor    时间: 2019-3-6 09:13

本帖最后由 ivor 于 2019-10-12 08:37 编辑

把代码放到批处理第一行,调用自身管理员身份运行
  1. %1 PowerShell -Command "& {start-process '%0' -Verb RunAs -Args 'rem'}" & exit
复制代码

作者: 老刘1号    时间: 2019-3-6 12:40

CreateObject("Shell.Application").ShellExecute "cmd.exe", "/c 1.bat",, "runas", 0
作者: WHY    时间: 2019-3-6 19:24

回复 5# 老刘1号


    不错,以前没注意这些细节,可以省掉参数判断,省掉 Run 了。
官方文档在这里:https://docs.microsoft.com/en-us ... /shell-shellexecute
不过 bat 放在第2个参数可能需要指定绝对路径
Test.vbs
  1. bat = Left(WSH.ScriptFullName, InStrRev(WSH.ScriptFullName,"\")) & "1.bat"
  2. CreateObject("Shell.Application").ShellExecute "cmd.exe", "/c """ & bat & """", , "runas", 0
复制代码
更直接的办法:
Test.vbs
  1. CreateObject("Shell.Application").ShellExecute "1.bat", , , "runas", 0
复制代码
1.bat
  1. @echo off
  2. pushd "%~dp0"
  3. echo;Your Code
复制代码

作者: hentai87    时间: 2019-3-6 19:51

回复 6# WHY

似乎不支持使用%AppData%这种路径。。。还挺重要的,因为用户名会变
作者: WHY    时间: 2019-3-6 20:24

回复 7# hentai87


    假设你的批处理位于 %AppData%\abc\1.bat
vbs
  1. bat = CreateObject("WScript.Shell").SpecialFolders("AppData") + "\abc\1.bat"
  2. CreateObject("Shell.Application").ShellExecute bat, , , "runas", 0
复制代码

作者: hentai87    时间: 2019-3-6 22:12

本帖最后由 hentai87 于 2019-3-6 22:31 编辑

回复 8# WHY


有用了,谢谢
作者: smss    时间: 2021-5-23 17:26

可以带参数 我也没搞明白
  1. %2 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~2"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit
  2. ::%2 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~0"^&chr(34)^&" "^&chr(34)^&"%~1"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2