widgettdc-api / scripts /fix-nodejs-install.ps1
Kraft102's picture
fix: sql.js Docker/Alpine compatibility layer for PatternMemory and FailureMemory
5a81b95
#Requires -RunAsAdministrator
<#
.SYNOPSIS
Fixes Node.js installation issues caused by Windows TEMP permission problems.
.DESCRIPTION
This script:
1. Fixes C:\Windows\TEMP permissions (root cause of MSI Error 1157)
2. Uninstalls existing Node.js installation
3. Cleans up leftover files
4. Reinstalls Node.js LTS via Chocolatey
.NOTES
Run this script as Administrator!
Close VS Code and other applications using Node before running.
#>
$ErrorActionPreference = "Continue"
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " Node.js Installation Fix Script" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host ""
# Check if running as admin
$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $isAdmin) {
Write-Host "ERROR: This script must be run as Administrator!" -ForegroundColor Red
Write-Host "Right-click PowerShell and select 'Run as Administrator'" -ForegroundColor Yellow
exit 1
}
# Step 1: Fix Windows\TEMP permissions
Write-Host "[1/7] Fixing C:\Windows\TEMP permissions..." -ForegroundColor Yellow
icacls "C:\Windows\TEMP" /grant "SYSTEM:(OI)(CI)F" /T 2>$null
icacls "C:\Windows\TEMP" /grant "Administrators:(OI)(CI)F" /T 2>$null
icacls "C:\Windows\TEMP" /grant "Users:(OI)(CI)(M)" /T 2>$null
Write-Host " Done." -ForegroundColor Green
# Step 2: Stop Node processes
Write-Host "[2/7] Stopping Node processes..." -ForegroundColor Yellow
$nodeProcs = Get-Process -Name "node" -ErrorAction SilentlyContinue
if ($nodeProcs) {
Stop-Process -Name "node" -Force -ErrorAction SilentlyContinue
Write-Host " Stopped $($nodeProcs.Count) process(es)." -ForegroundColor Green
} else {
Write-Host " No Node processes running." -ForegroundColor Green
}
# Step 3: Reset Windows Installer service
Write-Host "[3/7] Resetting Windows Installer service..." -ForegroundColor Yellow
net stop msiserver 2>$null
Start-Sleep -Seconds 2
net start msiserver 2>$null
Write-Host " Done." -ForegroundColor Green
# Step 4: Uninstall existing Node via MSI
Write-Host "[4/7] Uninstalling existing Node.js via MSI..." -ForegroundColor Yellow
$nodeProduct = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*" -ErrorAction SilentlyContinue |
Where-Object { $_.DisplayName -eq "Node.js" }
if ($nodeProduct) {
$productCode = $nodeProduct.PSChildName
Write-Host " Found Node.js with product code: $productCode" -ForegroundColor Gray
$process = Start-Process -FilePath "msiexec.exe" -ArgumentList "/x $productCode /qn" -Wait -PassThru
if ($process.ExitCode -eq 0 -or $process.ExitCode -eq 1605) {
Write-Host " Uninstalled successfully." -ForegroundColor Green
} else {
Write-Host " MSI uninstall returned code: $($process.ExitCode)" -ForegroundColor Yellow
}
Start-Sleep -Seconds 5
} else {
Write-Host " No MSI installation found." -ForegroundColor Gray
}
# Step 5: Clean up files
Write-Host "[5/7] Cleaning up leftover files..." -ForegroundColor Yellow
$paths = @(
"C:\Program Files\nodejs",
"$env:APPDATA\npm",
"$env:APPDATA\npm-cache",
"$env:LOCALAPPDATA\npm-cache"
)
foreach ($path in $paths) {
if (Test-Path $path) {
Remove-Item $path -Recurse -Force -ErrorAction SilentlyContinue
Write-Host " Removed: $path" -ForegroundColor Gray
}
}
Write-Host " Done." -ForegroundColor Green
# Step 6: Clean Chocolatey packages
Write-Host "[6/7] Cleaning Chocolatey packages..." -ForegroundColor Yellow
choco uninstall nodejs nodejs-lts nodejs.install -y --force 2>$null | Out-Null
Remove-Item "C:\ProgramData\chocolatey\lib\nodejs*" -Recurse -Force -ErrorAction SilentlyContinue
Write-Host " Done." -ForegroundColor Green
# Step 7: Install Node.js LTS
Write-Host "[7/7] Installing Node.js LTS via Chocolatey..." -ForegroundColor Yellow
choco install nodejs-lts -y
# Verify installation
Write-Host ""
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " Verification" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
# Refresh PATH
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
$nodeVersion = & "C:\Program Files\nodejs\node.exe" --version 2>$null
$npmVersion = & "C:\Program Files\nodejs\npm.cmd" --version 2>$null
if ($nodeVersion) {
Write-Host "Node.js: $nodeVersion" -ForegroundColor Green
Write-Host "npm: $npmVersion" -ForegroundColor Green
Write-Host ""
Write-Host "SUCCESS! Node.js is now installed." -ForegroundColor Green
} else {
Write-Host "WARNING: Could not verify Node.js installation." -ForegroundColor Yellow
Write-Host "Please restart your terminal and run 'node --version'" -ForegroundColor Yellow
}
Write-Host ""
Write-Host "NOTE: You may need to restart your terminal for PATH changes." -ForegroundColor Cyan