EasyNVR摄像机H5流媒体服务器在windows上批处理脚本自动以管理员权限运行

来源:互联网 发布:淘宝网 iphone4 屏 编辑:程序博客网 时间:2024/06/12 14:57

很多时候, 我们需要以管理员权限来运行批处理脚本, 比如操作 windows 服务. EasyNVR 中提供安装服务的批处理脚本, 运行这个bat文件, 自动将 EasyNVR 以 windows 服务的形式安装运行. 这样, 系统重启, 能够保证我们的程序自动启动, 不需要人为干预. 但是, 涉及到 windows 服务的安装, 在 win7 , win10 上面, 需要管理员权限来运行. 早前, 我们做的比较简单, 把程序打包发给客户的时候, 总是提醒客户, 以管理员权限运行 我们的启动脚本.

终于有一天, 我不想再发出 以管理员权限运行 这样的提醒了. 难道就不能自动以管理员权限运行吗? 答案是可以的, 于是有了这本博客.

百度搜索 以管理员权限运行 批处理 , 第一条结果来自知乎, 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 把你需要运行的脚本放到下面就可以了

将我们自己的代码放到上面代码的后面, 就以保证以管理员权限运行了

如果你也在寻找让批处理自动以管员权限运行的方法, 那就试试吧.

阅读全文
0 0