# DragonMoonlight Pre-Installation Check Script # Runs elevated before files are copied during installation param() $ErrorActionPreference = "Stop" function Write-Info { Write-Host $args -ForegroundColor Cyan } function Write-Success { Write-Host $args -ForegroundColor Green } function Write-Warning { Write-Host $args -ForegroundColor Yellow } function Write-Error { Write-Host $args -ForegroundColor Red } try { Write-Info "=== DragonMoonlight Pre-Installation Checks ===" # Check if running elevated $isElevated = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator") if (-not $isElevated) { Write-Error "This script must run elevated (as Administrator). Installation cannot proceed." [Windows.Forms.MessageBox]::Show( "DragonMoonlight installation failed.`r`nThis installer requires Administrator privileges.", "Installation Error", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Error ) exit 1 } Write-Success "✓ Running with elevated privileges" # Check Windows version $osVersion = [Environment]::OSVersion.Version $buildNumber = [int](Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' 'CurrentBuildNumber').CurrentBuildNumber Write-Info "Windows version: $($osVersion.Major).$($osVersion.Minor) Build $buildNumber" # Wintun requires Windows 10 2004 (Build 19041) or later if ($buildNumber -lt 19041) { Write-Error "This system does not meet the minimum requirements." Write-Error "DragonMoonlight requires Windows 10 (Build 19041/2004) or later." Write-Error "Current build: $buildNumber" [Windows.Forms.MessageBox]::Show( "DragonMoonlight requires Windows 10 (Build 2004) or later.`r`n`r`nYour system is running Build $buildNumber, which does not support the required Windows Filtering Platform features for Wintun.`r`n`r`nPlease update Windows and try again.", "Unsupported Windows Version", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Error ) exit 1 } Write-Success "✓ Windows version check passed (Build $buildNumber >= 19041)" # Warn about driver signature enforcement Write-Info "Checking driver signature enforcement status..." try { $signingLevel = (Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\State' 'UEFISecureBootEnabled' -ErrorAction SilentlyContinue).UEFISecureBootEnabled if ($signingLevel -eq 1) { Write-Warning "⚠ Secure Boot is enabled. Ensure that Wintun driver signing certificate is trusted." } else { Write-Success "✓ Secure Boot is disabled or not detected" } } catch { Write-Info "Could not determine Secure Boot status (this is normal on non-UEFI systems)" } # Log pre-install success to event log Write-Info "Logging pre-installation check to event log..." try { if (-not ([System.Diagnostics.EventLog]::SourceExists("DragonMoonlight"))) { New-EventLog -LogName Application -Source "DragonMoonlight" -ErrorAction SilentlyContinue } Write-EventLog -LogName Application -Source "DragonMoonlight" -EventId 1000 ` -Message "DragonMoonlight pre-install check passed. Build: $buildNumber" -EntryType Information Write-Success "✓ Event log entry created" } catch { Write-Warning "Could not write to event log (non-critical): $_" } Write-Success "=== Pre-installation checks completed successfully ===" exit 0 } catch { Write-Error "Pre-installation check failed: $_" [Windows.Forms.MessageBox]::Show( "Pre-installation check failed:`r`n`r`n$_", "Installation Error", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Error ) exit 1 }