original.bat 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. @setlocal enabledelayedexpansion
  2. @echo off
  3. @rem 要求以管理员方式启动
  4. bcdedit >nul
  5. if '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin)
  6. :UACPrompt
  7. %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
  8. exit /B
  9. :UACAdmin
  10. color 0F
  11. @cls
  12. title 【可视柜台应用程序安装脚本】
  13. for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
  14. set "DEL=%%a"
  15. )
  16. cd /d "%~dp0"
  17. @set /a argumentNum=0
  18. @set ret=0
  19. @rem 1 关机 2 重启
  20. @set poweroffPC=0
  21. @set /a installType=0
  22. @set installPure=1
  23. @for %%a in (%*) do set /a argumentNum+=1
  24. @if %argumentNum% gtr 0 (
  25. @echo argument count: %argumentNum%
  26. @if %argumentNum% == 1 (
  27. @if "%1" == "uninstall" (
  28. @set installType=4
  29. ) else if "%1" == "pure" (
  30. @set installType=1
  31. )
  32. )
  33. ) else (
  34. @echo no any arguments
  35. )
  36. @echo [RVCTermianal] ========== Install Start ==========
  37. @echo 安装脚本模式: %installType%
  38. @set sysProductKey=
  39. for /f "skip=1 delims==" %%i in ('wmic path softwarelicensingservice get OA3xOriginalProductKey') do (
  40. @set sysProductKey=%%i
  41. @goto DoneGetProductKey
  42. )
  43. :DoneGetProductKey
  44. @echo sysProductKey=%sysProductKey%
  45. if "%sysProductKey%" == "" (
  46. @echo [DEBUG] 操作系统未激活!
  47. ) else (
  48. @echo [DEBUG] 操作系统已激活。
  49. )
  50. @set ROOT=%cd%
  51. @set rvc_src_path_rvc_dir=%ROOT%\rvc
  52. @set rvc_src_path_Run_dir=%ROOT%\Run
  53. @set rvc_src_path_rvc_res_dir=%rvc_src_path_rvc_dir%\Resources
  54. @set rvc_install_path_root=%HOMEDRIVE%:
  55. @set sysdisk=1
  56. @set lnkPath=spexplorerauto.lnk
  57. @set AutoStartDir=C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
  58. @set AutoStartDir2=C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
  59. @set VS2019MarkFile=C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\devenv.exe
  60. tasklist /nh | find /i "spshell.exe"
  61. @if errorlevel 1 (
  62. @echo [INFO] 可视柜台进程不存在,跳过进程清理
  63. ) else (
  64. @echo [INFO] 检测到可视柜台进程存在,开始清理可视柜台相关进程……
  65. TASKKILL /F /IM spshell.exe
  66. TASKKILL /F /IM guardian.exe
  67. TASKKILL /F /IM cefclient.exe
  68. @for /f "tokens=1,2 delims= " %%a in ('tasklist /m ^| findstr "sphost.exe"') do (
  69. @echo name=%%a, PID = %%b, and will kill it.
  70. TASKKILL /F /PID %%a
  71. )
  72. )
  73. @rem 如果是非生产环境并且且是开发者的电脑在安装版本,那么部分公共的设置不生效,例如壁纸,开机自启动
  74. @if %installType% equ 0 (
  75. @if exist "%VS2019MarkFile%" (
  76. @call :ColorText E0 "[WARN] 检测到当前安装的系统环境为开发人员环境,将跳过部分设置,避免影响开发日常工作"
  77. @set installPure=0
  78. )
  79. )
  80. @echo [DEBUG] installPure=%installPure%
  81. @if exist "D:\\" (
  82. @if exist "D:\\Run\\version\\vtm.exe" (
  83. @set rvc_install_path_root=D:
  84. @set sysdisk=0
  85. ) else (
  86. @set rvc_install_path_root=D:
  87. @set sysdisk=0
  88. )
  89. )
  90. @echo [DEBUG] rvc_install_path_root=%rvc_install_path_root%
  91. @echo [DEBUG] rvc_src_path_Run_dir=%rvc_src_path_Run_dir%
  92. @set rvc_install_path_rvc_dir=%rvc_install_path_root%\rvc
  93. @set rvc_install_path_rvc_res_dir=%rvc_install_path_root%\rvc\Resources
  94. @set rvc_install_path_Run_dir=%rvc_install_path_root%\Run
  95. @set rvc_install_path_hardware_dir=%rvc_install_path_Run_dir%\hardwarecfg
  96. @set rvc_install_path_versions_dir=%rvc_install_path_Run_dir%\version
  97. @echo [DEBUG] rvc_install_path_rvc_dir=%rvc_install_path_rvc_dir%
  98. @echo [DEBUG] rvc_install_path_rvc_res_dir=%rvc_install_path_rvc_res_dir%
  99. @echo [DEBUG] rvc_install_path_Run_dir=%rvc_install_path_Run_dir%
  100. @echo [DEBUG] rvc_install_path_hardware_dir=%rvc_install_path_hardware_dir%
  101. @echo [DEBUG] rvc_install_path_versions_dir=%rvc_install_path_versions_dir%
  102. @set RVCTerminalDirName=
  103. @set RVCTerminalDirFullPath=
  104. @set RVCCurInstallVersion=
  105. @for /d %%a in ("%rvc_src_path_Run_dir%\version\*") do (
  106. @set RVCTerminalDirFullPath=%%a
  107. @set RVCTerminalDirName=%%~nxa
  108. @goto GetRVCTerminalDirNameDone
  109. )
  110. :GetRVCTerminalDirNameDone
  111. @set RVCCurInstallVersion=%RVCTerminalDirName%
  112. @echo [DEBUG] RVCCurInstallVersion=%RVCCurInstallVersion%
  113. @if not exist "%rvc_install_path_rvc_dir%" md "%rvc_install_path_rvc_dir%"
  114. @if not exist "%rvc_install_path_rvc_res_dir%" md "%rvc_install_path_rvc_res_dir%"
  115. @if not exist "%rvc_install_path_Run_dir%" md "%rvc_install_path_Run_dir%"
  116. @if not exist "%rvc_install_path_hardware_dir%" md "%rvc_install_path_hardware_dir%"
  117. @if not exist "%rvc_install_path_versions_dir%" md "%rvc_install_path_versions_dir%"
  118. @echo 【0/1】拷贝RVC目录...
  119. @xcopy "%rvc_src_path_rvc_dir%" %rvc_install_path_rvc_dir% /E/Y/Q
  120. @echo 【1/1】拷贝RVC目录OK!
  121. @echo 【1/2】拷贝终端版本,文件数量较多,部分终端拷贝时间比较长,请稍加等候......
  122. @if exist "%rvc_src_path_Run_dir%\hardwarecfg" ( xcopy "%rvc_src_path_Run_dir%\hardwarecfg" "%rvc_install_path_hardware_dir%" /E/Y/Q )
  123. @xcopy "%rvc_src_path_Run_dir%\version" "%rvc_install_path_versions_dir%" /E/Y/Q
  124. @echo 【2/2】拷贝终端版本OK!
  125. @echo 【2/3】设置系统桌面壁纸
  126. @set FileCount=0
  127. @set desk_path=%USERPROFILE%\Desktop
  128. @set desk_path_pub=C:\Users\Public\Desktop
  129. @echo [DEBUG] desk_path=%desk_path%
  130. @if %installPure% equ 0 (
  131. @call :ColorText E0 "[WARN] 开发设备不清理桌面和设置壁纸,直接跳过"
  132. @goto doNotRunUpdatePerEtc
  133. )
  134. @echo [INFO] 清理桌面文件内容
  135. @for /d %%a in (%desk_path%\*) do (
  136. @echo [DEBUG] %%a
  137. @rd /S /Q "%%a"
  138. )
  139. @for %%a in (%desk_path%\*) do (
  140. @echo [DEBUG] %%a
  141. @del "%%a"
  142. )
  143. @for /d %%a in (%desk_path_pub%\*) do (
  144. @echo [DEBUG] %%a
  145. @rd /S /Q "%%a"
  146. )
  147. @for %%a in (%desk_path_pub%\*) do (
  148. @echo [DEBUG] %%a
  149. @del "%%a"
  150. )
  151. @echo [INFO] 清理桌面 此电脑 图标
  152. reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel" /v {20D04FE0-3AEA-1069-A2D8-08002B30309D} /t REG_DWORD /d 1 /f
  153. reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu" /v {20D04FE0-3AEA-1069-A2D8-08002B30309D} /t REG_DWORD /d 1 /f
  154. @echo [INFO] 清理桌面 回收站 图标
  155. reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel" /v {645FF040-5081-101B-9F08-00AA002F954E} /t REG_DWORD /d 1 /f
  156. reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu" /v {645FF040-5081-101B-9F08-00AA002F954E} /t REG_DWORD /d 1 /f
  157. @echo [INFO] 清理桌面 网络 图标
  158. reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel" /v {F02C1A0D-BE21-4350-88B0-7367FC96EF3C} /t REG_DWORD /d 1 /f
  159. reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu" /v {F02C1A0D-BE21-4350-88B0-7367FC96EF3C} /t REG_DWORD /d 1 /f
  160. @echo [INFO] 清理桌面 控制面板 图标
  161. reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel" /v {5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0} /t REG_DWORD /d 1 /f
  162. reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu" /v {5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0} /t REG_DWORD /d 1 /f
  163. @echo [INFO] 清理桌面 用户的文件 图标
  164. reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel" /v {59031a47-3f72-44a7-89c5-5595fe6b30ee} /t REG_DWORD /d 1 /f
  165. reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu" /v {59031a47-3f72-44a7-89c5-5595fe6b30ee} /t REG_DWORD /d 1 /f
  166. @echo [INFO] 清理桌面文件内容OK!
  167. @set backupWallPaperPath=%rvc_install_path_root%\\rvc\\Resources\\WallPaper1920.png
  168. @set WallpaperPath=%rvc_install_path_rvc_res_dir%\WallPaper1920.png
  169. @if not exist C:\Windows\Web\Wallpaper\WallPaper1920.png (
  170. @if exist "C:\Windows\Web\Wallpaper" (
  171. @if not exist "%WallpaperPath%" (
  172. @call :ColorText 4F "[ERROR] 壁纸资源文件不存在,请检查版本的合法性和完整性!!"
  173. @goto InstallError
  174. )
  175. @copy "%WallpaperPath%" C:\Windows\Web\Wallpaper
  176. @set WallpaperPath=C:\Windows\Web\Wallpaper\WallPaper1920.png
  177. @set backupWallPaperPath=C:\\Windows\\Web\\Wallpaper\\WallPaper1920.png
  178. )
  179. ) else (
  180. @echo [DEBUG] 指定壁纸已存在系统目录
  181. @set WallpaperPath=C:\Windows\Web\Wallpaper\WallPaper1920.png
  182. @set backupWallPaperPath=C:\\Windows\\Web\\Wallpaper\\WallPaper1920.png
  183. )
  184. @echo [DEBUG] WallpaperPath=%WallpaperPath%
  185. @echo [INFO] 通过注册表设置桌面壁纸
  186. @set regWallpaperFile=%TEMP%\rvc_wallpaperset.reg
  187. reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper /t REG_SZ /d "%WallpaperPath%" /f
  188. reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v WallpaperStyle /t REG_DWORD /d 2 /f
  189. @if %errorlevel% neq 0 (
  190. @echo [DEBUG] backupWallPaperPath=%backupWallPaperPath%
  191. @echo Windows Registry Editor Version 5.00 > %regWallpaperFile%
  192. @echo. >> %regWallpaperFile%
  193. @echo [HKEY_CURRENT_USER\Control Panel\Desktop] >> %regWallpaperFile%
  194. @echo "Wallpaper"="%backupWallPaperPath%" >> %regWallpaperFile%
  195. @echo "WallpaperStyle"=dword:00000001 >> %regWallpaperFile%
  196. regedit /s %regWallpaperFile%
  197. @del %regWallpaperFile%
  198. )
  199. @call :ColorText E0 "[WARN] 通过注册表设置桌面壁纸OK!(部分机器需要重启后才生效,请注意观察)"
  200. @echo 【3/3】设置系统桌面壁纸OK!
  201. :doNotRunUpdatePerEtc
  202. @echo 【3/4】设置可视柜台应用程序开机自启动
  203. @echo [DEBUG] 读取注册表信息
  204. @set regFile=%TEMP%\rvc_spshellautostart.reg
  205. @set regTmpFile=%cd%\rvckey.txt
  206. @set explorerKey=
  207. @set needSetAutoStartFlag=1
  208. @set explorerNormal=0
  209. regedit /e %regFile% "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
  210. @type %regFile% | find /I """Shell""=" > "%regTmpFile%"
  211. @for /f "usebackq delims== tokens=2" %%a in ("%regTmpFile%") do (
  212. @set explorerKey=%%~a
  213. )
  214. @del %regFile%
  215. @del "%regTmpFile%"
  216. @echo [DEBUG] original explorer key:%explorerKey%
  217. @for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do call set explorerKey=%%explorerKey:%%i=%%i%%
  218. @echo [DEBUG] explorer key:%explorerKey%
  219. @if "%explorerKey%" == "explorer.exe" (
  220. @echo [DEBUG] 检测到未设置为开机自启动模式
  221. @set explorerNormal=1
  222. ) else if "%explorerKey%" == "d:\\run\\version\\vtm.exe" (
  223. @call :ColorText 2F "检测到已设置为VTM.exe开机自启动模式"
  224. @set needSetAutoStartFlag=0
  225. ) else if "%explorerKey%" == "wscript d:\\run\\version\\spexplorerfast.vbs" (
  226. @echo [DEBUG] 检测到已设置为VBS脚本开机自启动模式
  227. )
  228. @if %explorerNormal% neq 1 (
  229. @echo [DEBUG] 取消可视柜台应用程序开机自启动(同时恢复桌面)
  230. @echo [DEBUG] 临时存储取消开机自启动的注册表脚本
  231. @echo Windows Registry Editor Version 5.00 > %regFile%
  232. @echo. >> %regFile%
  233. @echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] >> %regFile%
  234. @echo "Shell1"="d:\\run\\version\\vtm.exe" >> %regFile%
  235. @echo "Shell"="explorer.exe" >> %regFile%
  236. @echo [DEBUG] 更新注册表!
  237. regedit /s %regFile%
  238. @del %regFile%
  239. )
  240. @echo [DEBUG] 移除旧有的可视柜台自启动文件
  241. @echo [DEBUG] AutoStartDir=%AutoStartDir%
  242. @echo [DEBUG] AutoStartDir2=%AutoStartDir2%
  243. @if exist "%AutoStartDir%\%lnkPath%" (
  244. @echo [DEBUG] 移除自启动文件1
  245. @del "%AutoStartDir%\%lnkPath%"
  246. )
  247. @if exist "%AutoStartDir2%\%lnkPath%" (
  248. @echo [DEBUG] 移除自启动文件2
  249. @del "%AutoStartDir2%\%lnkPath%"
  250. )
  251. @rem 移除旧有的可视柜台自启动快捷键(通过安装程序自动生成的)
  252. @for %%i in ("%AutoStartDir2%\招商银行可视柜台*.lnk") do (
  253. @echo [DEBUG] %%i
  254. @del "%%i"
  255. )
  256. @set targetPath=%rvc_install_path_versions_dir%\vtm.exe
  257. @if %installPure% equ 1 goto setAutoStartAndDesktopIcon
  258. @call :ColorText E0 "[WARN] 开发设备不设置开机自启动,仅设置桌面图标"
  259. mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b1=a.CreateShortcut(a.SpecialFolders(""Desktop"") & ""\可视柜台.lnk""):b1.TargetPath=""%targetPath%"":b1.WorkingDirectory=""%rvc_install_path_versions_dir%"":b1.Description=""招行可视柜台终端应用"":b1.Save:close")
  260. @goto DoneAutostartSet
  261. :setAutoStartAndDesktopIcon
  262. @echo [INFO] 设置应用自启动和桌面图标
  263. @rem ResourceWatcher:可视柜台.lnk
  264. @rem RVCTerminalApplication:招商银行可视柜台.lnk
  265. mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(a.SpecialFolders(""startup"") & ""\%lnkPath%""):b.TargetPath=""%targetPath%"":b.WorkingDirectory=""%rvc_install_path_versions_dir%"":b.Description=""招行可视柜台终端应用"":b.Save:Set b1=a.CreateShortcut(a.SpecialFolders(""Desktop"") & ""\可视柜台.lnk""):b1.TargetPath=""%targetPath%"":b1.WorkingDirectory=""%rvc_install_path_versions_dir%"":b1.Description=""招行可视柜台终端应用"":b1.Save:close")
  266. :DoneAutostartSet
  267. @echo 【4/4】设置可视柜台应用程序开机自启动OK!
  268. @goto End
  269. :InstallError
  270. @set ret=1
  271. :End
  272. @if "%ret%" == "1" (
  273. @call :ColorText 4F "[ERROR] 安装失败,具体失败步骤见上方描述!!"
  274. @pause
  275. @goto Done
  276. )
  277. @call :ColorText 2F "[INFO] ===所有安装步骤执行成功,正常退出,请双击桌面图标启动可视柜台应用进入安装配置,可视柜台应用版本号:%RVCCurInstallVersion%==="
  278. @set /a timoutsecs=5
  279. @echo [INFO] %timoutsecs%s 后自动退出该执行脚本并最小化到桌面
  280. @for /l %%a in (1, 1, %timoutsecs%) do (
  281. timeout 1 > nul
  282. @set /a lastsecs=%timoutsecs%-%%a
  283. @echo [INFO] !lastsecs!s 后自动退出该执行脚本并最小化到桌面
  284. )
  285. @echo 最小化到桌面并退出脚本流程
  286. @rem MinimizeAll ToggleDesktop
  287. mshta VBScript:Execute("Set a=CreateObject(""Shell.Application""):a.MinimizeAll:close")
  288. @rem @start %rvc_install_path_versions_dir%
  289. :Done
  290. @exit %ret%
  291. :stringLenth
  292. @set thestring=%~1
  293. @if not defined theString (
  294. @set Return=0
  295. @set %2=0
  296. @goto :eof
  297. )
  298. @set Return=0
  299. :stringLenth_continue
  300. @set /a Return+=1
  301. @set thestring=%thestring:~0,-1%
  302. @if defined thestring goto stringLenth_continue
  303. @if not "%2"=="" set %2=%Return%
  304. @goto :eof
  305. :ColorText
  306. @rem color 2F 这里的2代表背景,F代表字色
  307. @rem 0=黑、1=蓝、2=绿、3=浅绿、4=红、5=紫、6=黄、7=白、8=灰、9=淡蓝、
  308. @rem A=淡绿、B=淡浅绿、C=淡红、D=淡紫、E=淡黄、F=亮白
  309. <nul set /p ".=%DEL%" > "%~2"
  310. @findstr /v /a:%1 /R "^$" "%~2" nul
  311. @del "%~2" > nul 2>&1
  312. @echo.
  313. @goto :eof