很多时候, 我们需要以管理员权限来运行批处理脚本, 比如操作 windows 服务. EasyNVR 中提供安装服务的批处理脚本, 运行这个bat文件, 自动将 EasyNVR 以 windows 服务的形式安装运行. 这样, 系统重启, 能够保证我们的程序自动启动, 不需要人为干预. 但是, 涉及到 windows 服务的安装, 在 win7 , win10 上面, 需要管理员权限来运行. 早前, 我们做的比较简单, 把程序打包发给客户的时候, 总是提醒客户, 以管理员权限运行 我们的启动脚本.
终于有一天, 我不想再发出 以管理员权限运行 这样的提醒了. 难道就不能自动以管理员权限运行吗? 答案是可以的, 于是有了这本博客.
百度搜索 以管理员权限运行 批处理
, 第一条结果来自知乎, , 我们一开始尝试了知乎网友提供的方案, 测试发现, 知乎网友提供的方案只能在部分机器上运行正常, 另外一部分机器上, 会导致 %~dp0
输出不正常. 于是, 我们放弃了这种方案. 继续寻找.
最终, 我们在 stackoverflow 找到一位叫 Matt 的网友留下的 code. 通过测试, 他提供的 code 完全符合我们的需求. 下面贴出他的代码.
:::::::::::::::::::::::::::::::::::::::::::::: Elevate.cmd - Version 4:: Automatically check & get admin rights:::::::::::::::::::::::::::::::::::::::::::: @echo off CLS ECHO. ECHO ============================= ECHO Running Admin shell ECHO =============================:init setlocal DisableDelayedExpansion set cmdInvoke=1 set winSysFolder=System32 set "batchPath=%~0" for %%k in (%0) do set batchName=%%~nk set "vbsGetPrivileges=%temp%\OEgetPriv_%batchName%.vbs" setlocal EnableDelayedExpansion:checkPrivileges NET FILE 1>NUL 2>NUL if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges ):getPrivileges if '%1'=='ELEV' (echo ELEV & shift /1 & goto gotPrivileges) ECHO. ECHO ************************************** ECHO Invoking UAC for Privilege Escalation ECHO ************************************** ECHO Set UAC = CreateObject^("Shell.Application"^) > "%vbsGetPrivileges%" ECHO args = "ELEV " >> "%vbsGetPrivileges%" ECHO For Each strArg in WScript.Arguments >> "%vbsGetPrivileges%" ECHO args = args ^& strArg ^& " " >> "%vbsGetPrivileges%" ECHO Next >> "%vbsGetPrivileges%" if '%cmdInvoke%'=='1' goto InvokeCmd ECHO UAC.ShellExecute "!batchPath!", args, "", "runas", 1 >> "%vbsGetPrivileges%" goto ExecElevation:InvokeCmd ECHO args = "/c """ + "!batchPath!" + """ " + args >> "%vbsGetPrivileges%" ECHO UAC.ShellExecute "%SystemRoot%\%winSysFolder%\cmd.exe", args, "", "runas", 1 >> "%vbsGetPrivileges%":ExecElevation "%SystemRoot%\%winSysFolder%\WScript.exe" "%vbsGetPrivileges%" %* exit /B:gotPrivileges setlocal & cd /d %~dp0 if '%1'=='ELEV' (del "%vbsGetPrivileges%" 1>nul 2>nul & shift /1) :::::::::::::::::::::::::::: ::START :::::::::::::::::::::::::::: REM 把你需要运行的脚本放到下面就可以了
将我们自己的代码放到上面代码的后面, 就以保证以管理员权限运行了
如果你也在寻找让批处理自动以管员权限运行的方法, 那就试试吧.
关于EasyNVR
EasyNVR能够通过简单的网络摄像机通道配置,将传统监控行业里面的高清网络摄像机IP Camera、NVR等具有RTSP协议输出的设备接入到EasyNVR,EasyNVR能够将这些视频源的音视频数据进行拉取,转换为RTMP/HLS,进行全平台终端H5直播(Web、Android、iOS),并且EasyNVR能够将视频源的直播数据对接到第三方CDN网络,实现互联网级别的直播分发;
详细说明:
点击链接加入群【EasyNVR解决方案】:
获取更多信息
邮件:
WEB:
Copyright © EasyDarwin.org 2012-2017