Board logo

标题: [系统相关] BAT以管理员运行且不弹黑窗口二者不能兼得,真的很难吗! [打印本页]

作者: locoman    时间: 2018-9-2 03:52     标题: BAT以管理员运行且不弹黑窗口二者不能兼得,真的很难吗!

解决BAT文件以管理员权限运行有多种方法能做到。
但是,要做到,既要自动以管理员权限运行,同时又要做到不弹出黑窗口,二者兼得却不能做到。


下面几种代码,都能以管理员权限运行,即使试着加用了我所能得知的几种方法(包括所说的VBS)去解决  不弹黑窗口 的问题 ,却始终还是要弹出黑窗口来。或许是我没有搞得来

特来请教这里的大神是否有高招解决?
期待大神的热心援手指导, 谢谢您了!!


自动以管理员权限运行的代码之一:
  1. @echo off
  2. net session >nul 2>&1
  3. if not "%errorLevel%" == "0" (
  4. echo Oops: This tools must run with administrator permissions!
  5. echo it will popup the UAC dialog, please click [Yes] to continue.
  6. echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
  7. echo UAC.ShellExecute "%~s0", "%*", "", "runas", 1 >> "%temp%\getadmin.vbs"
  8. "%temp%\getadmin.vbs"
  9. exit /b 2
  10. )
  11. netsh interface ipv4 set address "WLAN" static 192.168.1.111 255.255.255.0 192.168.1.1 1
  12. netsh interface ipv4 set dnsservers "WLAN" static 114.114.114.114 primary
  13. netsh interface ipv4 add dns "WLAN" ... index=2
复制代码
自动以管理员权限运行的代码之二:
  1. @echo off
  2. >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
  3. if '%errorlevel%' NEQ '0' (
  4. echo 请求管理员权限...
  5. goto UACPrompt
  6. ) else ( goto gotAdmin )
  7. :UACPrompt
  8. echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
  9. echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
  10. "%temp%\getadmin.vbs"
  11. exit /B
  12. :gotAdmin
  13. netsh interface ipv4 set address name="WLAN" source=dhcp
  14. netsh interface ipv4 set dnsservers name="WLAN" source=dhcp
复制代码
自动以管理员权限运行的代码之三:
  1. @echo off
  2. %1 %2
  3. ver|find "5.">nul&&goto :st
  4. mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :st","","runas",1)(window.close)&goto :eof
  5. :st
  6. copy "%~0" "%windir%\system32\"
  7. netsh interface ipv4 set address "WLAN" static 192.168.1.113 255.255.255.0 192.168.1.1 1
  8. netsh interface ipv4 set dnsservers "WLAN" static 114.114.114.114 primary
  9. netsh interface ipv4 add dns "WLAN" ... index=2
复制代码
自动以管理员权限运行的代码之四:
  1. @echo off
  2. :: BatchGotAdmin
  3. :-------------------------------------
  4. REM --> Check for permissions
  5. >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
  6. REM --> If error flag set, we do not have admin.
  7. if '%errorlevel%' NEQ '0' (
  8. echo Requesting administrative privileges...
  9. goto UACPrompt
  10. ) else ( goto gotAdmin )
  11. :UACPrompt
  12. echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
  13. echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
  14. "%temp%\getadmin.vbs"
  15. exit /B
  16. :gotAdmin
  17. if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
  18. pushd "%CD%"
  19. CD /D "%~dp0"
  20. :--------------------------------------
  21. netsh interface ipv4 set address name="WLAN" source=dhcp
  22. netsh interface ipv4 set dnsservers name="WLAN" source=dhcp
复制代码
——另外,以上几个代码运行时,都会弹出那个UAC提示框出来,且必须要点击 是 才能继续运行,请问如何才能让其不弹这个提示框且能继续运行呢?
作者: 狄钦dQ    时间: 2018-9-2 11:11

单纯的bat/vbs我还没见过比较完美的,个人推荐使用工具将bat转成exe,以上问题都迎刃而解,加之源码加密,完美。
作者: locoman    时间: 2018-9-2 17:39

本帖最后由 locoman 于 2018-9-2 18:15 编辑

回复 2# 狄钦dQ

谢谢您的指点!
这里有个问题:我的这些BAT是在另一个应用程序中生成的,再用那个应用程序去启动运行BAT的。
如果在这里的大神熟手们能介绍一个  命令行BAT转EXE工具  就好了,这样,我就可以用那个应用生成BAT文件后,再用应用程序执行  BAT转EXE工具  将BAT自动转成EXE文件,再用应用程序运行EXE,就可以完美解决了吧。

——希望,见多识广的大神熟手们介绍一个 命令行BAT转EXE工具,谢谢!不要那种图形窗口操作的那种,如:
BAT2EXE  d:\temp\test.bat test.exe

作者: Batcher    时间: 2018-9-4 22:00

回复 3# locoman


bat2com
bat2exec
这两个工具支持命令行,可以试试能否满足你的需求。
作者: locoman    时间: 2018-9-5 14:07

回复 4# Batcher

谢谢Batcher 的热情回复,烦请帮忙帮到底,可否贴个下载地址。
不是我懒,是我百度过很多,下载来的都窗口手工操作的东东,不能采用命令行执行。

作者: Batcher    时间: 2018-9-5 14:40

回复 5# locoman


http://bbs.bathome.net/s/tool/index.html
可以在这里搜索一下
作者: xczxczxcz    时间: 2018-9-6 16:55

顶上脚本帖了4个,其实就是1个,这个生成vbs的方法在有些情况会出错,出错的状况我记录了,但重装系统后不知放哪了。还有一个提权方法是之家刺客发布的。代码很长,适用范围测后发现比较小,影响批速度。但有个好处,顶上VBS失效地方,他的有效。
避免弹黑窗用超级帐户登陆。
作者: smss    时间: 2020-6-9 12:25

本帖最后由 smss 于 2020-6-9 12:34 编辑

::以管理员权限远行
  1. %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
复制代码
::关闭UAC提示框重启生效
  1. reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
复制代码
:E刷系统时挂载单元修改一劳永逸
  1. for %%i in (C D E F G H I J K L) do if exist %%i:\Windows\system32\cmd.exe set n=%%i:
  2. reg load HKLM\PE_Software %n%\windows\system32\config\Software
  3. reg add HKLM\PE_SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
  4. reg unload "hklm\PE_Software"
  5. del /ah/f/s/q "%n%\windows\system32\config"
复制代码

作者: dimo    时间: 2023-2-16 15:04

一楼给的几段代码都是用到临时VBS脚本,脚本中有效的一行拼接后是这样:
  1. CreateObject("Shell.Application").ShellExecute "file.bat", "%1", "", "runas", 1
复制代码
这后面有个参数1.即代表弹出窗口运行。1改为0可以不弹窗运行。就是这一个参数。
就像仅为了避免黑窗那个vbs脚本:
  1. WScript.CreateObject("WScript.Shell").Run "file.bat",0
复制代码
这句脚本发挥作用的就是后面的0,若改为1则不弹黑窗的作用消失。
UAC账户控制那个窗口好像没什么好办法,就只能在控制面板关。




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