不少时候, 咱们须要以管理员权限来运行批处理脚本, 好比操做 windows 服务. EasyNVR 中提供安装服务的批处理脚本, 运行这个bat文件, 自动将 EasyNVR 以 windows 服务的形式安装运行. 这样, 系统重启, 可以保证咱们的程序自动启动, 不须要人为干预. 可是, 涉及到 windows 服务的安装, 在 win7 , win10 上面, 须要管理员权限来运行. 早前, 咱们作的比较简单, 把程序打包发给客户的时候, 老是提醒客户, 以管理员权限运行 咱们的启动脚本.shell
终于有一天, 我不想再发出 以管理员权限运行 这样的提醒了. 难道就不能自动以管理员权限运行吗? 答案是能够的, 因而有了这本博客.windows
百度搜索 以管理员权限运行 批处理
, 第一条结果来自知乎, https://www.zhihu.com/question/34541107?sort=created , 咱们一开始尝试了知乎网友提供的方案, 测试发现, 知乎网友提供的方案只能在部分机器上运行正常, 另一部分机器上, 会致使 %~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 把你须要运行的脚本放到下面就能够了
将咱们本身的代码放到上面代码的后面, 就以保证以管理员权限运行了spa
若是你也在寻找让批处理自动以管员权限运行的方法, 那就试试吧.scala
EasyNVR可以经过简单的网络摄像机通道配置,将传统监控行业里面的高清网络摄像机IP Camera、NVR等具备RTSP协议输出的设备接入到EasyNVR,EasyNVR可以将这些视频源的音视频数据进行拉取,转换为RTMP/HLS,进行全平台终端H5直播(Web、Android、iOS),而且EasyNVR可以将视频源的直播数据对接到第三方CDN网络,实现互联网级别的直播分发;code
详细说明:http://www.easydarwin.org/easynvr/视频
点击连接加入群【EasyNVR解决方案】:383501345ip
邮件:support@easydarwin.org get
Copyright © EasyDarwin.org 2012-2017