[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] 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提示框出来,且必须要点击 是 才能继续运行,请问如何才能让其不弹这个提示框且能继续运行呢?

单纯的bat/vbs我还没见过比较完美的,个人推荐使用工具将bat转成exe,以上问题都迎刃而解,加之源码加密,完美。

TOP

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

TOP

回复 3# locoman


bat2com
bat2exec
这两个工具支持命令行,可以试试能否满足你的需求。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 4# Batcher

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

TOP

回复 5# locoman


http://bbs.bathome.net/s/tool/index.html
可以在这里搜索一下
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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

TOP

本帖最后由 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"
复制代码

TOP

一楼给的几段代码都是用到临时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账户控制那个窗口好像没什么好办法,就只能在控制面板关。
Hope is a sad thing.
https://nsdimo.gitee.io/

TOP

返回列表