70 lines
2.1 KiB
PowerShell
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)"
|
|
}
|