不少時候, 咱們須要以管理員權限來運行批處理腳本, 好比操做 windows 服務. EasyNVR 中提供安裝服務的批處理腳本, 運行這個bat文件, 自動將 EasyNVR 以 windows 服務的形式安裝運行. 這樣, 系統重啓, 可以保證咱們的程序自動啓動, 不須要人爲干預. 可是, 涉及到 windows 服務的安裝, 在 win7 , win10 上面, 須要管理員權限來運行. 早前, 咱們作的比較簡單, 把程序打包發給客戶的時候, 老是提醒客戶, 以管理員權限運行 咱們的啓動腳本.shell
終於有一天, 我不想再發出 以管理員權限運行 這樣的提醒了. 難道就不能自動以管理員權限運行嗎? 答案是能夠的, 因而有了這本博客.windows
百度搜索 以管理員權限運行 批處理
, 第一條結果來自知乎, https://www.zhihu.com/question/34541107?sort=created , 咱們一開始嘗試了知乎網友提供的方案, 測試發現, 知乎網友提供的方案只能在部分機器上運行正常, 另一部分機器上, 會致使 %~dp0
輸出不正常. 因而, 咱們放棄了這種方案. 繼續尋找.markdown
最終, 咱們在 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
EasyNVR可以經過簡單的網絡攝像機通道配置,將傳統監控行業裏面的高清網絡攝像機IP Camera、NVR等具備RTSP協議輸出的設備接入到EasyNVR,EasyNVR可以將這些視頻源的音視頻數據進行拉取,轉換爲RTMP/HLS,進行全平臺終端H5直播(Web、Android、iOS),而且EasyNVR可以將視頻源的直播數據對接到第三方CDN網絡,實現互聯網級別的直播分發;scala
詳細說明:http://www.easydarwin.org/easynvr/code
點擊連接加入羣【EasyNVR解決方案】:383501345視頻
郵件:support@easydarwin.org ip
Copyright © EasyDarwin.org 2012-2017