From 5484d44d35a6b8ac4bbbab51d7256d1826621c44 Mon Sep 17 00:00:00 2001 From: Scheianu Ionut Date: Mon, 22 Sep 2025 19:51:37 +0300 Subject: [PATCH] createed a good service --- .../static/quality_recticel_print_helper.zip | Bin 9269 -> 9269 bytes .../static/quality_recticel_print_service.zip | Bin 24810 -> 32075 bytes .../install_native_service.bat | 68 ++++++-- windows_print_service/install_simple.bat | 149 ++++++++++++++++++ windows_print_service/service_wrapper.bat | 4 + 5 files changed, 206 insertions(+), 15 deletions(-) create mode 100644 windows_print_service/install_simple.bat create mode 100644 windows_print_service/service_wrapper.bat diff --git a/py_app/app/static/quality_recticel_print_helper.zip b/py_app/app/static/quality_recticel_print_helper.zip index 27e182e3ca2d1c866d608a9d322ae090838510d0..349b575ee14e44972622402b56ecd41b6e340dad 100644 GIT binary patch delta 24 ecmdn$vDIV44|!(88D^V*%l}{oF(!Xgwg&);E(&=7 delta 24 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 diff --git a/windows_print_service/install_native_service.bat b/windows_print_service/install_native_service.bat index 8b8167b..48186a6 100644 --- a/windows_print_service/install_native_service.bat +++ b/windows_print_service/install_native_service.bat @@ -38,33 +38,71 @@ echo. echo Copying service files... copy /Y "%~dp0print_service.ps1" "%SERVICE_DIR%\print_service.ps1" if %errorLevel% neq 0 ( - echo ❌ Error copying service files! + echo ❌ Error copying PowerShell service file! echo Make sure print_service.ps1 is in the same directory as this installer. pause exit /b 1 ) + +copy /Y "%~dp0service_wrapper.bat" "%SERVICE_DIR%\service_wrapper.bat" +if %errorLevel% neq 0 ( + echo ❌ Error copying service wrapper file! + echo Make sure service_wrapper.bat is in the same directory as this installer. + pause + exit /b 1 +) echo ✅ Service files copied successfully +echo. +echo Checking for existing service... +sc query "%SERVICE_NAME%" >nul 2>&1 +if not errorlevel 1 ( + echo ⚠️ Service already exists. Removing existing service first... + sc stop "%SERVICE_NAME%" >nul 2>&1 + sc delete "%SERVICE_NAME%" >nul 2>&1 + timeout /t 2 /nobreak >nul +) + echo. echo Installing Windows Service... -REM Create the Windows service -sc create "%SERVICE_NAME%" ^ - binpath="powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -File \"%SERVICE_DIR%\print_service.ps1\"" ^ - start=auto ^ - displayname="Quality Recticel Print Service" ^ - description="Local HTTP service for silent PDF printing from Quality Recticel web application" +REM Create the Windows service with corrected syntax +echo Creating service: %SERVICE_NAME% +echo Binary path: %SERVICE_DIR%\service_wrapper.bat +echo. +sc create %SERVICE_NAME% binPath="%SERVICE_DIR%\service_wrapper.bat" start=auto DisplayName="Quality Recticel Print Service" + +REM Check if service creation succeeded +sc query %SERVICE_NAME% >nul 2>&1 if errorlevel 1 ( - echo ❌ Failed to create Windows service - echo. - echo Troubleshooting: - echo 1. Make sure you're running as Administrator - echo 2. Check if the service already exists: sc query %SERVICE_NAME% - echo 3. If it exists, delete it first: sc delete %SERVICE_NAME% - pause - exit /b 1 + echo ❌ Service creation verification failed + goto :service_error ) + +echo ✅ Service created successfully + +REM Set description (may fail on older Windows, that's OK) +sc description %SERVICE_NAME% "Local HTTP service for silent PDF printing from Quality Recticel web application" >nul 2>&1 + +goto :service_created + +:service_error +echo ❌ Failed to create Windows service +echo. +echo Troubleshooting: +echo 1. Make sure you're running as Administrator +echo 2. Check if the service already exists: sc query %SERVICE_NAME% +echo 3. If it exists, delete it first: sc delete %SERVICE_NAME% +echo. +echo Manual commands to try: +echo sc create %SERVICE_NAME% binPath="\"%SERVICE_DIR%\service_wrapper.bat\"" +echo sc config %SERVICE_NAME% start=auto +echo. +pause +exit /b 1 + +:service_created echo ✅ Windows service created successfully echo. diff --git a/windows_print_service/install_simple.bat b/windows_print_service/install_simple.bat new file mode 100644 index 0000000..a0bc800 --- /dev/null +++ b/windows_print_service/install_simple.bat @@ -0,0 +1,149 @@ +@echo off +REM Quality Recticel Print Service - Simple Native Installation +REM This version uses the most basic approach to avoid command line parsing issues + +echo ================================================ +echo Quality Recticel Print Service - Native Windows +echo ================================================ +echo. + +REM Check if running as administrator +net session >nul 2>&1 +if %errorLevel% NEQ 0 ( + echo ERROR: This script must be run as Administrator! + echo Right-click on this file and select "Run as administrator" + pause + exit /b 1 +) + +echo ✅ Administrator privileges confirmed +echo. + +REM Service configuration +set SERVICE_NAME=QualityRecticelPrintService +set SERVICE_DIR=C:\Program Files\QualityRecticel\PrintService + +echo Creating service directory: %SERVICE_DIR% +if not exist "%SERVICE_DIR%" ( + mkdir "%SERVICE_DIR%" 2>nul + if errorlevel 1 ( + echo ❌ Failed to create service directory + pause + exit /b 1 + ) +) +echo ✅ Service directory created + +echo. +echo Copying service files... + +REM Copy PowerShell service file +if not exist "%~dp0print_service.ps1" ( + echo ❌ print_service.ps1 not found in installer directory + echo Make sure all service files are in the same folder as this installer + pause + exit /b 1 +) +copy /Y "%~dp0print_service.ps1" "%SERVICE_DIR%\print_service.ps1" +echo ✅ PowerShell service copied + +REM Create a simple service executable using PowerShell +echo Creating service executable... +echo @echo off > "%SERVICE_DIR%\start_service.bat" +echo cd /d "%SERVICE_DIR%" >> "%SERVICE_DIR%\start_service.bat" +echo powershell.exe -ExecutionPolicy Bypass -NoProfile -File "print_service.ps1" >> "%SERVICE_DIR%\start_service.bat" + +echo ✅ Service files prepared + +echo. +echo Removing any existing service... +sc query "%SERVICE_NAME%" >nul 2>&1 +if not errorlevel 1 ( + echo Found existing service, removing it... + sc stop "%SERVICE_NAME%" >nul 2>&1 + timeout /t 2 /nobreak >nul + sc delete "%SERVICE_NAME%" >nul 2>&1 + timeout /t 2 /nobreak >nul + echo ✅ Existing service removed +) + +echo. +echo Installing Windows Service... +echo Command: sc create %SERVICE_NAME% binPath="%SERVICE_DIR%\start_service.bat" +echo. + +REM Create service with absolute minimal parameters +sc create "%SERVICE_NAME%" binPath="%SERVICE_DIR%\start_service.bat" + +if errorlevel 1 ( + echo. + echo ❌ Service creation failed. Let's try troubleshooting... + echo. + echo Checking sc command availability: + sc /? + echo. + echo Current user context: + whoami + echo. + echo Trying alternative service creation method: + sc create TestService binPath="cmd.exe /c echo test" + sc delete TestService >nul 2>&1 + echo. + echo If the above worked, the issue is with our service path. + echo If it failed, there's a deeper Windows service issue. + echo. + pause + exit /b 1 +) + +echo ✅ Service created successfully + +echo. +echo Configuring service startup... +sc config "%SERVICE_NAME%" start=auto +sc config "%SERVICE_NAME%" DisplayName="Quality Recticel Print Service" + +echo. +echo Starting the service... +sc start "%SERVICE_NAME%" + +if errorlevel 1 ( + echo ⚠️ Service created but failed to start + echo This is normal - let's check what happened... + echo. + echo Service status: + sc query "%SERVICE_NAME%" + echo. + echo You can start it manually later with: sc start %SERVICE_NAME% +) else ( + echo ✅ Service started successfully +) + +echo. +echo Testing service connectivity... +timeout /t 3 /nobreak >nul +powershell -Command "try { $response = Invoke-WebRequest -Uri 'http://localhost:8765/health' -TimeoutSec 5; Write-Host '✅ Service is responding: ' $response.StatusCode } catch { Write-Host '⚠️ Service not responding yet (this is normal, may need a few seconds)' }" + +echo. +echo ================================================ +echo Installation Summary +echo ================================================ +echo. +echo Service Name: %SERVICE_NAME% +echo Service Directory: %SERVICE_DIR% +echo Service URL: http://localhost:8765 +echo Log File: %SERVICE_DIR%\print_service.log +echo. +echo Service Management Commands: +echo Start: sc start %SERVICE_NAME% +echo Stop: sc stop %SERVICE_NAME% +echo Status: sc query %SERVICE_NAME% +echo Delete: sc delete %SERVICE_NAME% +echo. +echo Next Steps: +echo 1. Wait 10-30 seconds for service to fully start +echo 2. Test: Open http://localhost:8765/health in your browser +echo 3. Install Chrome extension if needed +echo 4. Test printing from Quality Recticel web application +echo. +pause \ No newline at end of file diff --git a/windows_print_service/service_wrapper.bat b/windows_print_service/service_wrapper.bat new file mode 100644 index 0000000..961ac93 --- /dev/null +++ b/windows_print_service/service_wrapper.bat @@ -0,0 +1,4 @@ +@echo off +REM Service wrapper for PowerShell print service +cd /d "C:\Program Files\QualityRecticel\PrintService" +powershell.exe -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -File "print_service.ps1" \ No newline at end of file