Files
proton-stream/packaging/windows/proton-stream.wxs
T
nvrl 6239780978 fix(app,packaging): keep libmpv and the taskbar icon across Windows upgrades
An MSI upgrade left the app without libmpv-2.dll until it was installed a
second time (B62). Costing runs before RemoveExistingProducts, saw the old
DLL at the same version and skipped the copy, and removing the old product
then deleted it. Both installer definitions now set REINSTALLMODE=amus;
every file is private to the install directory.

A taskbar pin lost its icon after a while (B63). The exe carried no icon
resource, and the Start Menu shortcut's icon lived in the per-ProductCode
installer cache that each upgrade deletes. build.rs now compiles the .ico
into proton-stream.exe, and the shortcut has no Icon of its own (and in the
WiX build is no longer advertised), so both show the exe's icon.
2026-10-06 03:04:07 +02:00

96 lines
4.5 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!--
WiX v4/v5/v6 installer definition. Built by scripts/build.ps1:
wix build -arch x64 -ext WixToolset.UI.wixext packaging/windows/proton-stream.wxs `
-d Version=0.1.0 -d BinDir=... -d MpvDll=... -d IconFile=... -d LicenseRtf=... -d ReadMe=... `
-o dist/proton-stream-0.1.0-x64.msi
UpgradeCode is fixed forever: it is what makes 0.2.0 replace 0.1.0 instead of
installing beside it. Never regenerate it.
-->
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
xmlns:ui="http://wixtoolset.org/schemas/v4/wxs/ui">
<Package Name="Proton Stream"
Manufacturer="Nils Pukropp"
Version="$(var.Version)"
UpgradeCode="0a5c3818-3401-469c-a2ac-a3172cef1938"
Scope="perMachine"
Compressed="yes"
Language="1033">
<SummaryInformation Description="Netflix-style desktop client for Proton Drive public links" />
<MajorUpgrade AllowSameVersionUpgrades="yes"
DowngradeErrorMessage="A newer version of Proton Stream is already installed." />
<MediaTemplate EmbedCab="yes" />
<!-- Copy every file on an upgrade, whatever is on disk. Costing runs
before RemoveExistingProducts, so it sees the old libmpv-2.dll — the
same version, since mpv is pinned — and decides not to copy it. The
removal of the old product then deletes it, and the upgrade ends with
no DLL: "mpv missing" until a second install, which finds nothing on
disk and copies it. Every file here is private to INSTALLFOLDER, so
overwriting unconditionally downgrades nothing shared. -->
<Property Id="REINSTALLMODE" Value="amus" />
<Icon Id="AppIcon" SourceFile="$(var.IconFile)" />
<Property Id="ARPPRODUCTICON" Value="AppIcon" />
<Property Id="ARPURLINFOABOUT" Value="https://github.com/narrrl/proton-stream" />
<Property Id="ARPNOREPAIR" Value="1" />
<!-- 6432 resolves to Program Files (x64) because the build passes -arch x64. -->
<StandardDirectory Id="ProgramFiles6432Folder">
<Directory Id="INSTALLFOLDER" Name="Proton Stream" />
</StandardDirectory>
<StandardDirectory Id="ProgramMenuFolder" />
<!-- The Guids are written out rather than left to WiX's deterministic
generation, and they match packaging/windows/proton-stream.wixl.wxs
one for one. That is what lets the Linux-built .msi and this one
upgrade each other instead of double-counting components. A new
payload file gets a new Component and a new Guid, in both files. -->
<ComponentGroup Id="AppComponents" Directory="INSTALLFOLDER">
<Component Guid="623c8cb8-b826-4d57-a054-e5be56f24c19">
<File Id="AppExe" Source="$(var.BinDir)\proton-stream.exe" KeyPath="yes" />
<!-- Not advertised, and no Icon: either one puts the shortcut's icon
in C:\Windows\Installer\{ProductCode}, which the next upgrade
deletes along with the icon of every taskbar pin made from the
shortcut. This way it shows the exe's own icon resource. -->
<Shortcut Id="StartMenuShortcut"
Directory="ProgramMenuFolder"
Name="Proton Stream"
Description="Browse and stream a Proton Drive public link"
Target="[#AppExe]"
WorkingDirectory="INSTALLFOLDER" />
</Component>
<!-- The CLI, and the PATH entry that makes it worth installing. Tied to
the same component so uninstalling takes the PATH edit with it. -->
<Component Guid="6440650e-281f-4842-a75a-4cbea8be0d71">
<File Id="CliExe" Source="$(var.BinDir)\pstr.exe" KeyPath="yes" />
<Environment Id="PstrPath" Name="PATH" Value="[INSTALLFOLDER]"
Part="last" Action="set" System="yes" Permanent="no" />
</Component>
<!-- libmpv does the demuxing and decoding. There is no static build of it
worth shipping, so the DLL sits beside the exe. -->
<Component Guid="ff74fc79-78e3-4ed8-881d-f322ed6ff6b4">
<File Id="MpvDll" Source="$(var.MpvDll)" KeyPath="yes" />
</Component>
<Component Guid="5bb65b44-f5df-423b-8dcc-a753d7aef565">
<File Id="ReadMe" Source="$(var.ReadMe)" Name="README.md" KeyPath="yes" />
</Component>
</ComponentGroup>
<Feature Id="Main" Title="Proton Stream" Level="1">
<ComponentGroupRef Id="AppComponents" />
</Feature>
<WixVariable Id="WixUILicenseRtf" Value="$(var.LicenseRtf)" />
<ui:WixUI Id="WixUI_InstallDir" InstallDirectory="INSTALLFOLDER" />
</Package>
</Wix>