@echo off setlocal enabledelayedexpansion set APP_ASAR=%~1 set UPDATE_FILE=%~2 set EXE_PATH=%~3 set LOG_FILE=%TEMP%\electron-update.log echo ======================================== > "%LOG_FILE%" echo Electron App Auto-Update Helper >> "%LOG_FILE%" echo Started: %date% %time% >> "%LOG_FILE%" echo ======================================== >> "%LOG_FILE%" echo. >> "%LOG_FILE%" if not exist "%UPDATE_FILE%" ( echo [ERROR] Update file not found: %UPDATE_FILE% >> "%LOG_FILE%" goto :start_app ) echo [INFO] Update file found: %UPDATE_FILE% >> "%LOG_FILE%" echo [INFO] Target app.asar: %APP_ASAR% >> "%LOG_FILE%" echo [INFO] Application exe: %EXE_PATH% >> "%LOG_FILE%" echo [INFO] Waiting for application to close... >> "%LOG_FILE%" REM 获取应用进程名 for /f "tokens=*" %%a in ("%EXE_PATH%") do set EXE_NAME=%%~nxa echo [INFO] Waiting for %EXE_NAME% to close... >> "%LOG_FILE%" REM 等待应用进程完全关闭(最多等待10秒) set COUNT=0 :wait_loop tasklist /FI "IMAGENAME eq %EXE_NAME%" 2>nul | find /I "%EXE_NAME%" >nul if errorlevel 1 goto process_closed set /a COUNT+=1 if %COUNT% GEQ 20 ( echo [WARN] Application still running after 10 seconds >> "%LOG_FILE%" goto process_closed ) timeout /t 1 /nobreak >nul goto wait_loop :process_closed echo [INFO] Application process closed >> "%LOG_FILE%" timeout /t 1 /nobreak >nul echo [INFO] Backing up current app.asar... >> "%LOG_FILE%" if exist "%APP_ASAR%.backup" ( del /f /q "%APP_ASAR%.backup" >nul 2>&1 ) if exist "%APP_ASAR%" ( move /y "%APP_ASAR%" "%APP_ASAR%.backup" >nul 2>&1 if errorlevel 1 ( echo [WARN] First move attempt failed, retrying... >> "%LOG_FILE%" timeout /t 2 /nobreak >nul move /y "%APP_ASAR%" "%APP_ASAR%.backup" >nul 2>&1 if errorlevel 1 ( echo [ERROR] Failed to backup app.asar, file is locked >> "%LOG_FILE%" goto :start_app ) ) echo [SUCCESS] Backup completed >> "%LOG_FILE%" ) echo [INFO] Applying update... >> "%LOG_FILE%" move /y "%UPDATE_FILE%" "%APP_ASAR%" >nul 2>&1 if errorlevel 1 ( echo [ERROR] Failed to apply update >> "%LOG_FILE%" if exist "%APP_ASAR%.backup" ( echo [INFO] Restoring backup... >> "%LOG_FILE%" move /y "%APP_ASAR%.backup" "%APP_ASAR%" >nul 2>&1 ) goto :start_app ) echo [SUCCESS] Update applied successfully! >> "%LOG_FILE%" if exist "%UPDATE_FILE%" ( del /f /q "%UPDATE_FILE%" >nul 2>&1 ) :start_app echo [INFO] Restarting application... >> "%LOG_FILE%" echo ======================================== >> "%LOG_FILE%" start "" "%EXE_PATH%" exit /b 0