The shell resolves Square44x44Logo through the package resource index; this package never had a resources.pri, so every icon lookup failed and Start/taskbar showed a generic icon regardless of the Assets PNGs. Empirically (SHLoadIndirectString against the live package), with AllowExternalContent MRT loads resources from the EXTERNAL location, not the manifest's folder — so Register-vRIO.ps1 now copies Assets\ and resources.pri next to the exe before registering. Make-Assets.ps1 regenerates the PNGs from vwe.ico and rebuilds the pri (needs makepri from the Windows SDK / SDK.BuildTools NuGet). Package version bumped; the MrtCache is keyed by package full name, so same-version re-registration serves stale lookups. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
61 lines
2.4 KiB
PowerShell
61 lines
2.4 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Grants VRio.App.exe package identity by registering the sparse package
|
|
(pkg\AppxManifest.xml) with the exe's folder as the external location.
|
|
|
|
Identity is what lets Windows Dynamic Lighting offer vRIO under
|
|
Settings > Personalization > Dynamic Lighting > "Background light control",
|
|
so the keyboard lamp mirror keeps working while the game has focus.
|
|
|
|
Unsigned registration requires Developer Mode
|
|
(Settings > System > For developers).
|
|
|
|
.PARAMETER ExePath
|
|
Folder containing VRio.App.exe. Defaults to the repo's Release output;
|
|
for a deployed zip, pass the extracted VRio folder.
|
|
|
|
.PARAMETER Unregister
|
|
Remove the registration instead.
|
|
#>
|
|
param(
|
|
[string]$ExePath = (Join-Path $PSScriptRoot '..\src\VRio.App\bin\Release\net48'),
|
|
[switch]$Unregister
|
|
)
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
$packageName = 'VWE.vRIO'
|
|
|
|
$existing = Get-AppxPackage -Name $packageName -ErrorAction SilentlyContinue
|
|
if ($existing) {
|
|
Write-Host "Removing existing registration $($existing.PackageFullName)..."
|
|
Remove-AppxPackage -Package $existing.PackageFullName
|
|
}
|
|
if ($Unregister) {
|
|
Write-Host 'Unregistered.'
|
|
return
|
|
}
|
|
|
|
$exe = Join-Path $ExePath 'VRio.App.exe'
|
|
if (-not (Test-Path $exe)) { throw "VRio.App.exe not found in '$ExePath'" }
|
|
$manifest = Join-Path $PSScriptRoot 'AppxManifest.xml'
|
|
|
|
# With AllowExternalContent the shell resolves the manifest's logo assets
|
|
# against the EXTERNAL location, not the manifest's folder — the Start/taskbar
|
|
# icon only shows if Assets\ and resources.pri sit next to the exe.
|
|
$assetDir = New-Item -ItemType Directory -Force (Join-Path $ExePath 'Assets')
|
|
Copy-Item (Join-Path $PSScriptRoot 'Assets\*') $assetDir -Force
|
|
Copy-Item (Join-Path $PSScriptRoot 'resources.pri') $ExePath -Force
|
|
|
|
Add-AppxPackage -Register $manifest -ExternalLocation (Resolve-Path $ExePath).Path
|
|
$family = (Get-AppxPackage -Name $packageName).PackageFamilyName
|
|
Write-Host "Registered $packageName with external location '$ExePath'."
|
|
Write-Host ''
|
|
Write-Host 'IMPORTANT: identity is granted through shell activation only. Launch vRIO'
|
|
Write-Host 'from the Start menu entry ("vRIO") or via:'
|
|
Write-Host " explorer shell:AppsFolder\$family!vRIO"
|
|
Write-Host 'Double-clicking VRio.App.exe runs it WITHOUT identity (lamp mirror then'
|
|
Write-Host 'works only while vRIO has focus).'
|
|
Write-Host ''
|
|
Write-Host 'Then enable the lamp mirror and pick vRIO under Settings > Personalization >'
|
|
Write-Host 'Dynamic Lighting > Background light control.'
|