mirror of
https://github.com/amiayweb/Hytale-F2P.git
synced 2026-02-26 12:51:57 -03:00
2.6 KiB
2.6 KiB
Quick Fix Summary: Ghost Process Issue
Problem
Task Manager freezed after launcher runs due to accumulating ghost PowerShell processes.
Root Cause
File: backend/utils/platformUtils.js
Two functions used execSync() to run PowerShell commands:
detectGpuWindows()(GPU detection at startup & game launch)getSystemTypeWindows()(system type detection)
execSync() on Windows spawns PowerShell processes that don't properly terminate → accumulate over time → freeze Task Manager.
Solution Applied
Changed From (❌ Wrong):
output = execSync(
'powershell -NoProfile -ExecutionPolicy Bypass -Command "Get-CimInstance..."',
{ encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }
);
Changed To (✅ Correct):
const result = spawnSync('powershell.exe', [
'-NoProfile',
'-ExecutionPolicy', 'Bypass',
'-Command',
'Get-CimInstance...'
], {
encoding: 'utf8',
timeout: 5000, // 5 second timeout - processes killed if hung
stdio: ['ignore', 'pipe', 'ignore'],
windowsHide: true
});
What Changed
| Aspect | Before | After |
|---|---|---|
| Method | execSync() → shell string |
spawnSync() → argument array |
| Process spawn | Via cmd.exe → powershell.exe | Direct powershell.exe |
| Timeout | None (can hang indefinitely) | 5 seconds (processes auto-killed) |
| Process cleanup | Hit or miss | Guaranteed |
| Ghost processes | ❌ Accumulate over time | ✅ Always terminate |
| Performance | Slower (shell parsing) | Faster (direct spawn) |
Why This Works
- spawnSync directly spawns PowerShell without intermediate cmd.exe
- timeout: 5000 forcibly kills any hung process after 5 seconds
- windowsHide: true prevents window flashing and improves cleanup
- Node.js has better control over process lifecycle with spawnSync
Impact
- ✅ No more ghost PowerShell processes
- ✅ Task Manager stays responsive
- ✅ Launcher performance improved
- ✅ Game launch unaffected (still works the same)
- ✅ All fallback methods preserved (Get-WmiObject, wmic)
Files Changed
Only one file modified: backend/utils/platformUtils.js
- Import added for
spawnSync - Two functions refactored with new approach
- All error handling preserved
Testing
After applying fix, verify no ghost processes appear in Task Manager:
Before launch: PowerShell processes = 0 or 1
During launch: PowerShell processes = 0 or 1
After game closes: PowerShell processes = 0 or 1
If processes keep accumulating, check Task Manager → Details tab → look for powershell.exe entries.