本帖最后由 diamond168 于 2025-6-16 19:20 编辑
- [url=home.php?mod=space&uid=331734]@echo[/url] off
- REM 设置当前目录为脚本所在目录
- cd /d "%~dp0"
- REM 步骤1:获取管理员权限
- NET FILE 1>NUL 2>NUL
- if '%errorlevel%' == '0' ( goto :gotAdmin ) else ( powershell Start-Process '%0' -Verb runAs & exit /B )
- :gotAdmin
- REM 步骤2:从startup.exe获取版本信息
- setlocal EnableDelayedExpansion
- for /f "usebackq delims=" %%i in (`powershell -command "& {(Get-Item '.\startup.exe').VersionInfo.ProductVersion}"`) do (
- set "fullversion=%%i" REM 获取完整版本号(如21.20.8.505)
- )
- REM 提取前两位版本号(如21.20)
- for /f "tokens=1,2 delims=." %%a in ("!fullversion!") do (
- set "majorversion=%%a.%%b"
- )
- echo 检测到卡巴斯基版本: !majorversion!
- REM 步骤3:询问用户是否启用自动续订
- :autoRenewal
- echo.
- echo 是否启用自动许可证续订?
- set /p renewal="请输入选择(y/n): "
- if "%renewal%"=="y" (
- goto :editionSelection
- ) else if "%renewal%"=="n" (
- goto :installation
- ) else (
- echo 无效选择。
- goto :autoRenewal
- )
- :editionSelection
- echo.
- echo 请选择卡巴斯基版本:
- echo 1. 标准版
- echo 2. 加强版
- echo 3. 优选版
- echo.
- set /p edition="请输入选择(1-3): "
- if "%edition%"=="1" (
- set "editionName=卡巴斯基标准版"
- set "licenseKey=GAJPU-UTD18-3B2JJ-62CQ2"
- ) else if "%edition%"=="2" (
- set "editionName=卡巴斯基加强版"
- set "licenseKey=GE86F-9WQRM-KK5PG-1ZE2W"
- ) else if "%edition%"=="3" (
- set "editionName=卡巴斯基优选版"
- set "licenseKey=5AP55-UFAT1-QUMNN-7CUDZ"
- ) else (
- echo 无效选择。
- goto :editionSelection
- )
- echo.
- echo 已选择版本: %editionName%
- :installation
- REM 步骤4:运行"startup.exe"并禁用自我保护
- echo.
- echo 正在安装卡巴斯基(禁用自我保护)...
- start "" startup.exe /pSelfProtection=0
- REM 步骤5:监控注册表并在安装期间修改值
- echo.
- echo 正在监控并更新注册表值...
- :checkRegistry
- REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\KasperskyLab\AVP%majorversion%\environment" /v "ProductStatus" >nul 2>&1
- if %errorlevel% equ 0 (
- echo 发现注册表,正在应用修改...
- REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\KasperskyLab\AVP%majorversion%\environment" /v "ProductStatus" /t REG_SZ /d "" /f >nul 2>&1
- echo 注册表修改完成。
- goto :setupTask
- ) else (
- goto :checkRegistry
- )
- :setupTask
- if "%renewal%"=="n" (
- goto :done
- )
- REM 步骤6:管理许可证续订的定时任务
- :search
- REM 清除之前的值
- set "avp="
- REM 在卡巴斯基目录下搜索avp.com
- for /f "delims=" %%A in ('dir /b /s /a-d "C:\Program Files (x86)\Kaspersky Lab\avp.com" 2^>nul') do (
- set "avp=%%A"
- )
- if not defined avp (
- timeout /t 5 >nul
- goto :search
- )
- echo.
- echo 找到avp.com路径: %avp%
- echo 正在创建每28天运行的许可证续订任务...
- set "taskname=卡巴斯基许可证续订"
- set "xmlfile=%TEMP%\task.xml"
- :: 创建卡巴许可续期批处理文件
- (
- echo @echo off
- echo if "%%1" == "minimized" goto :main
- echo start /min "" "%%~0" minimized ^& exit /b
- echo :main
- echo "%avp%" LICENSE /add "5AP55-UFAT1-QUMNN-7CUDZ"
- echo EXIT
- ) > "%SystemDrive%\卡巴许可续期.bat"
- :: 创建计划任务
- schtasks /create /tn "卡巴许可续期" /tr "%SystemDrive%\卡巴许可续期.bat" /sc onstart /delay 0005:00 /rl highest /f
- REM 导出任务为XML...
- schtasks /query /tn "%taskname%" /xml > "%xmlfile%"
- REM 修改XML设置...
- powershell -Command ^
- "$xml = [xml](Get-Content '%xmlfile%');" ^
- "$nsmgr = New-Object System.Xml.XmlNamespaceManager($xml.NameTable);" ^
- "$nsmgr.AddNamespace('ns', $xml.DocumentElement.NamespaceURI);" ^
- "$settings = $xml.SelectSingleNode('//ns:Settings', $nsmgr);" ^
- "if (-not $settings) { $settings = $xml.CreateElement('Settings', $xml.DocumentElement.NamespaceURI); $xml.Task.AppendChild($settings) | Out-Null };" ^
- "if (-not $settings.SelectSingleNode('ns:StartWhenAvailable', $nsmgr)) {" ^
- "$node = $xml.CreateElement('StartWhenAvailable', $xml.DocumentElement.NamespaceURI);" ^
- "$node.InnerText = 'true'; $settings.AppendChild($node) | Out-Null" ^
- "} else { $settings.SelectSingleNode('ns:StartWhenAvailable', $nsmgr).InnerText = 'true' };" ^
- "if (-not $settings.SelectSingleNode('ns:DisallowStartIfOnBatteries', $nsmgr)) {" ^
- "$node = $xml.CreateElement('DisallowStartIfOnBatteries', $xml.DocumentElement.NamespaceURI);" ^
- "$node.InnerText = 'false'; $settings.AppendChild($node) | Out-Null" ^
- "} else { $settings.SelectSingleNode('ns:DisallowStartIfOnBatteries', $nsmgr).InnerText = 'false' };" ^
- "if (-not $settings.SelectSingleNode('ns:RunOnlyIfNetworkAvailable', $nsmgr)) {" ^
- "$node = $xml.CreateElement('RunOnlyIfNetworkAvailable', $xml.DocumentElement.NamespaceURI);" ^
- "$node.InnerText = 'true'; $settings.AppendChild($node) | Out-Null" ^
- "} else { $settings.SelectSingleNode('ns:RunOnlyIfNetworkAvailable', $nsmgr).InnerText = 'true' };" ^
- "$xml.Save('%xmlfile%')" >nul 2>&1
- REM 重新导入修改后的任务...
- schtasks /delete /tn "%taskname%" /f >nul 2>&1
- schtasks /create /tn "%taskname%" /xml "%xmlfile%" /f >nul 2>&1
- del "%xmlfile%" 2>nul
- echo 任务更新成功。
- echo.
- echo 正在激活 %editionName%...
- :checkStartup
- REM 检查avp.exe是否运行
- tasklist | find /i "avp.exe" >nul 2>&1
- if %errorlevel% neq 0 (
- timeout /t 5 >nul 2>&1
- goto :checkStartup
- )
- schtasks /run /tn "%taskname%"
- echo.
- echo 已选择版本: %editionName%
- echo 使用版本: %majorversion%
- echo 许可证密钥: %licenseKey%
- :done
- echo 处理完成。
- endlocal
- timeout /t 10
复制代码
用我这个代码重新安装,每次开机后5分钟会在后台运行,运行时隐藏批处理窗口,不影响任何使用。现在我家里、公司都在用。 |