32 lines
2.1 KiB
PowerShell
32 lines
2.1 KiB
PowerShell
param([string]$InstallDirectory = (Join-Path $env:LOCALAPPDATA 'Programs\MusicBridge'), [switch]$NoShortcut)
|
|
$ErrorActionPreference = 'Stop'
|
|
$target = [IO.Path]::GetFullPath($InstallDirectory).TrimEnd('\')
|
|
$source = [IO.Path]::GetFullPath((Join-Path $PSScriptRoot 'app'))
|
|
if (!(Test-Path -LiteralPath (Join-Path $source 'MusicBridge.Agent.exe'))) { throw 'Package is incomplete: app\MusicBridge.Agent.exe is missing.' }
|
|
if ($target -eq $source -or $target.StartsWith($source + '\', [StringComparison]::OrdinalIgnoreCase)) { throw 'Choose an install directory outside the package app directory.' }
|
|
$parent = Split-Path $target -Parent
|
|
if (!$parent -or $target -eq [IO.Path]::GetPathRoot($target)) { throw 'Unsafe install directory.' }
|
|
New-Item -ItemType Directory -Path $target -Force | Out-Null
|
|
$marker = Join-Path $target '.musicbridge-install'
|
|
if ((Get-ChildItem -LiteralPath $target -Force | Measure-Object).Count -gt 0 -and !(Test-Path -LiteralPath $marker)) { throw 'Directory is not a MusicBridge installation. Choose an empty directory.' }
|
|
$exe = Join-Path $target 'MusicBridge.Agent.exe'
|
|
if (Test-Path -LiteralPath $exe) {
|
|
try { $probe = [IO.File]::Open($exe, 'Open', 'ReadWrite', 'None'); $probe.Dispose() }
|
|
catch { throw 'Close MusicBridge from its tray menu before updating.' }
|
|
}
|
|
# Copy without deleting unrelated files. Existing user identity lives outside this directory.
|
|
Copy-Item -Path (Join-Path $source '*') -Destination $target -Recurse -Force
|
|
Copy-Item -LiteralPath (Join-Path $PSScriptRoot 'Uninstall.ps1') -Destination $target -Force
|
|
Copy-Item -LiteralPath (Join-Path $PSScriptRoot 'Firewall.ps1') -Destination $target -Force
|
|
Set-Content -LiteralPath $marker -Value 'MusicBridge per-user installation v1' -Encoding UTF8
|
|
if (!$NoShortcut) {
|
|
$shell = New-Object -ComObject WScript.Shell
|
|
$shortcut = $shell.CreateShortcut((Join-Path ([Environment]::GetFolderPath('Programs')) 'MusicBridge.lnk'))
|
|
$shortcut.TargetPath = $exe
|
|
$shortcut.Arguments = '--tray --lan'
|
|
$shortcut.WorkingDirectory = $target
|
|
$shortcut.Save()
|
|
}
|
|
Write-Host "Installed: $exe"
|
|
Write-Host 'Open MusicBridge from Start. Autostart can be enabled from the tray menu.'
|