Files
QSfera/scripts/repair-windows-autostart.ps1
T
2026-06-10 05:39:50 +03:00

70 lines
2.1 KiB
PowerShell

param(
[string]$RuntimeRoot = "$env:USERPROFILE\craft\CraftMaster\windows-cl-msvc2022-x86_64",
[string]$AppName = "QSfera",
[switch]$Launch
)
$ErrorActionPreference = "Stop"
function Fail([string]$Message) {
Write-Error $Message
exit 1
}
$runtimeBin = Join-Path $RuntimeRoot "bin"
$runtimeExe = Join-Path $runtimeBin "qsfera.exe"
if (-not (Test-Path -LiteralPath $runtimeExe)) {
Fail "QSfera executable was not found: $runtimeExe"
}
$requiredDlls = @(
"Qt6Core.dll",
"Qt6Gui.dll",
"Qt6Widgets.dll",
"Qt6Network.dll",
"Qt6Qml.dll",
"Qt6Quick.dll",
"qt6keychain.dll",
"kdsingleapplication-qt6.dll"
)
foreach ($dll in $requiredDlls) {
$dllPath = Join-Path $runtimeBin $dll
if (-not (Test-Path -LiteralPath $dllPath)) {
Fail "Required runtime DLL is missing: $dllPath"
}
}
$runKey = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run"
New-ItemProperty -Path $runKey -Name $AppName -PropertyType String -Value $runtimeExe -Force | Out-Null
$actualValue = (Get-ItemProperty -Path $runKey).$AppName
if ($actualValue -ne $runtimeExe) {
Fail "Autostart registry value was not updated. Expected '$runtimeExe', got '$actualValue'."
}
Write-Output "OK: $AppName autostart points to $runtimeExe"
Write-Output "OK: required Qt6 runtime DLLs are present in $runtimeBin"
if ($Launch) {
Get-Process -Name "qsfera" -ErrorAction SilentlyContinue |
Where-Object { $_.Path -ne $runtimeExe } |
Stop-Process -Force -ErrorAction SilentlyContinue
if (-not (Get-Process -Name "qsfera" -ErrorAction SilentlyContinue | Where-Object { $_.Path -eq $runtimeExe })) {
Start-Process -FilePath $runtimeExe -WorkingDirectory $runtimeBin -WindowStyle Hidden
Start-Sleep -Seconds 5
}
$process = Get-Process -Name "qsfera" -ErrorAction SilentlyContinue |
Where-Object { $_.Path -eq $runtimeExe } |
Select-Object -First 1
if (-not $process) {
Fail "QSfera did not start from $runtimeExe"
}
Write-Output "OK: QSfera is running from $($process.Path) with PID $($process.Id)"
}