mirror of
https://git.sanhost.net/sanasol/hytale-f2p
synced 2026-02-26 08:01:46 -03:00
84 lines
2.6 KiB
Markdown
84 lines
2.6 KiB
Markdown
# 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):
|
|
```javascript
|
|
output = execSync(
|
|
'powershell -NoProfile -ExecutionPolicy Bypass -Command "Get-CimInstance..."',
|
|
{ encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }
|
|
);
|
|
```
|
|
|
|
### Changed To (✅ Correct):
|
|
```javascript
|
|
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
|
|
|
|
1. **spawnSync directly spawns PowerShell** without intermediate cmd.exe
|
|
2. **timeout: 5000** forcibly kills any hung process after 5 seconds
|
|
3. **windowsHide: true** prevents window flashing and improves cleanup
|
|
4. **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.
|