diff --git a/main.js b/main.js index 583825b..0bec52b 100644 --- a/main.js +++ b/main.js @@ -272,6 +272,7 @@ ipcMain.handle('camera-proxy-cookie-launch', async (event, { deploymentUrl, cook // Create a batch file to launch the cookie-based camera proxy const truncatedKey = safeCookieKey.length > 20 ? safeCookieKey.substring(0, 20) + '...' : safeCookieKey; const batchContent = `@echo off +title APT-Proxy-${safeDeviceUuid} echo Launching Alta Video Camera Proxy (Cookie Method)... echo Domain: ${safeDomain} echo Device UUID: ${safeDeviceUuid} @@ -290,13 +291,14 @@ pause >nul`; console.log('Launching cookie-based camera proxy via batch file:', batchPath); console.log('Command will be: aware-cam-proxy.exe -a', safeDomain, '-d', safeDeviceUuid, '-k [REDACTED]'); - - // Launch the batch file in a new command prompt window - const cmdProcess = spawn('cmd', ['/c', 'start', 'cmd', '/k', batchPath], { + + // Launch the batch file in a new command prompt window with unique title + const windowTitle = `APT-Proxy-${safeDeviceUuid}`; + const cmdProcess = spawn('cmd', ['/c', 'start', `"${windowTitle}"`, 'cmd', '/c', batchPath], { detached: true, stdio: 'ignore' }); - + // Store the process information for later termination const processInfo = { process: cmdProcess, @@ -305,9 +307,10 @@ pause >nul`; startTime: Date.now(), cookieKey: truncatedKey, domain: safeDomain, + windowTitle: windowTitle, // Store window title for targeted cleanup type: 'cookie' // Mark as cookie-based proxy }; - + activeProxyProcesses.set(cmdProcess.pid, processInfo); // Clean up the batch file after a delay @@ -348,124 +351,59 @@ pause >nul`; // Stop camera proxy functionality ipcMain.handle('camera-proxy-stop', async (event, { processId }) => { try { - console.log('Attempting to stop camera proxy processes and close terminal windows...'); - + console.log('Attempting to stop camera proxy processes...'); + return new Promise((resolve) => { - let processesKilled = 0; - let totalAttempts = 0; - - // Step 1: Kill all aware-cam-proxy-win.exe processes by name - const killProxy = spawn('taskkill', ['/f', '/im', 'aware-cam-proxy-win.exe'], { + // Kill all aware-cam-proxy.exe processes by name + const killProxy = spawn('taskkill', ['/f', '/im', 'aware-cam-proxy.exe'], { stdio: ['ignore', 'pipe', 'pipe'] }); - + let proxyOutput = ''; let proxyError = ''; - + killProxy.stdout.on('data', (data) => { proxyOutput += data.toString(); }); - + killProxy.stderr.on('data', (data) => { proxyError += data.toString(); }); - + killProxy.on('close', (code) => { - totalAttempts++; + // Clean up our process tracking + activeProxyProcesses.clear(); + if (code === 0 || proxyOutput.includes('SUCCESS')) { - processesKilled++; console.log('Camera proxy processes terminated successfully'); + resolve({ + success: true, + message: 'Camera proxy processes stopped successfully' + }); + } else if (proxyError.includes('not found') || proxyError.includes('No tasks')) { + console.log('No camera proxy processes were running'); + resolve({ + success: true, + message: 'No camera proxy processes were running' + }); + } else { + resolve({ + success: true, + message: 'Attempted to stop all camera proxy processes' + }); } - - // Step 2: Kill command prompt windows containing our batch file or camera proxy - const killCmdWindows = spawn('powershell', [ - '-Command', - `Get-Process | Where-Object {$_.ProcessName -eq "cmd" -and $_.MainWindowTitle -like "*camera-proxy*" -or $_.MainWindowTitle -like "*aware-cam-proxy*" -or $_.MainWindowTitle -like "*Command Prompt*"} | Stop-Process -Force` - ], { - stdio: 'ignore' - }); - - killCmdWindows.on('close', () => { - totalAttempts++; - - // Step 3: More aggressive approach - kill all cmd processes that might be related - const killAllCmd = spawn('taskkill', ['/f', '/im', 'cmd.exe'], { - stdio: ['ignore', 'pipe', 'pipe'] - }); - - let cmdOutput = ''; - - killAllCmd.stdout.on('data', (data) => { - cmdOutput += data.toString(); - }); - - killAllCmd.on('close', (cmdCode) => { - totalAttempts++; - if (cmdCode === 0 || cmdOutput.includes('SUCCESS')) { - processesKilled++; - console.log('Command prompt windows closed successfully'); - } - - // Step 4: Final cleanup - use wmic as fallback - const wmicKill = spawn('wmic', [ - 'process', 'where', - 'name="cmd.exe" or name="aware-cam-proxy-win.exe"', - 'delete' - ], { - stdio: 'ignore' - }); - - wmicKill.on('close', (wmicCode) => { - totalAttempts++; - if (wmicCode === 0) { - processesKilled++; - } - - // Clean up our process tracking - activeProxyProcesses.clear(); - - // Determine final result - if (processesKilled > 0) { - resolve({ - success: true, - message: 'Camera proxy processes and terminal windows closed successfully' - }); - } else if (proxyError.includes('not found') || proxyError.includes('No tasks')) { - resolve({ - success: true, - message: 'No camera proxy processes were running' - }); - } else { - resolve({ - success: true, - message: 'Attempted to close all camera proxy processes and windows' - }); - } - }); - - wmicKill.on('error', () => { - // Even if wmic fails, we might have succeeded with other methods - activeProxyProcesses.clear(); - resolve({ - success: processesKilled > 0, - message: processesKilled > 0 ? - 'Camera proxy processes terminated, some terminal windows may remain open' : - 'Unable to terminate camera proxy processes. Please close terminal windows manually.' - }); - }); - }); - }); }); - + killProxy.on('error', (error) => { console.error('Error with taskkill by name:', error); + activeProxyProcesses.clear(); resolve({ success: false, message: `Failed to stop camera proxy: ${error.message}` }); }); }); - + } catch (error) { console.error('Failed to stop camera proxy:', error); return {