mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-30 04:57:22 -06:00
182 lines
12 KiB
XML
182 lines
12 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
|
<Package Name="LightCraft" Manufacturer="Learning Machines LLC" Version="$(var.Version)" UpgradeCode="229BB552-5EFD-479A-BA86-8CB6D926390C" Scope="perUserOrMachine" Compressed="yes" Language="1033">
|
|
<SummaryInformation Description="LightCraft photo library and raw developer" Manufacturer="Learning Machines LLC" />
|
|
<?include $(sys.SOURCEFILEDIR)install-policy.wxi?>
|
|
<!-- Same-version upgrades let successive pre-releases of one X.Y.Z replace each other
|
|
(MSI versions are numeric, so 1.2.3-rc.1 and 1.2.3-rc.2 are both 1.2.3). -->
|
|
<MajorUpgrade AllowSameVersionUpgrades="yes" DowngradeErrorMessage="A newer version of LightCraft is already installed." />
|
|
<MediaTemplate EmbedCab="yes" CompressionLevel="high" />
|
|
|
|
<Icon Id="LightcraftIcon.ico" SourceFile="$(var.IconPath)" />
|
|
<Property Id="ARPPRODUCTICON" Value="LightcraftIcon.ico" />
|
|
<Property Id="ARPURLINFOABOUT" Value="https://getartcraft.com/apps/lightcraft" />
|
|
<Property Id="ARPURLUPDATEINFO" Value="https://getartcraft.com/apps/lightcraft" />
|
|
<Property Id="ARPHELPLINK" Value="https://discord.gg/artcraft" />
|
|
|
|
<StandardDirectory Id="ProgramFiles6432Folder">
|
|
<Directory Id="CraftSuiteFolder" Name="ArtCraft">
|
|
<Directory Id="INSTALLFOLDER" Name="LightCraft" />
|
|
</Directory>
|
|
</StandardDirectory>
|
|
<!-- The folder of the installed version (written by LightcraftApp), so an upgrade installs
|
|
where the user chose instead of moving back to Program Files (issue #399). Searched into
|
|
its own property: AppSearch would otherwise overwrite INSTALLFOLDER=... given to msiexec. -->
|
|
<Property Id="PREVIOUSINSTALLFOLDER">
|
|
<RegistrySearch Id="PreviousInstallFolder" Root="HKLM" Key="Software\LightCraft" Name="InstallFolder" Type="raw" />
|
|
</Property>
|
|
<!-- Older MSIs (including 0.5.0) only recorded the executable in App Paths. Type="file"
|
|
without a FileSearch returns its containing directory. Keep the searches separate so
|
|
the newer InstallFolder value and an explicit INSTALLFOLDER always take precedence. -->
|
|
<Property Id="LEGACYINSTALLFOLDER">
|
|
<RegistrySearch Id="LegacyInstallFolder" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\App Paths\lightcraft.exe" Type="file" />
|
|
</Property>
|
|
<!-- That directory search doesn't check the executable exists, and when its unquoted path is
|
|
gone it falls back to the text before the first space: a deleted
|
|
"C:\Program Files\LightCraft\lightcraft.exe" yields "C:\". Only use the folder when this
|
|
search, which does require lightcraft.exe, finds it too. -->
|
|
<Property Id="LEGACYINSTALLEXE">
|
|
<RegistrySearch Id="LegacyInstallExe" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\App Paths\lightcraft.exe" Type="file">
|
|
<FileSearch Id="LegacyInstallExeFile" Name="lightcraft.exe" />
|
|
</RegistrySearch>
|
|
</Property>
|
|
<StandardDirectory Id="ProgramMenuFolder" />
|
|
|
|
<Feature Id="Main" Title="LightCraft" Level="1">
|
|
<ComponentGroupRef Id="LightcraftFiles" />
|
|
</Feature>
|
|
|
|
<UIRef Id="LightcraftUI" />
|
|
</Package>
|
|
|
|
<!--
|
|
Interactive install UI: Welcome -> Destination Folder -> Ready to install -> progress ->
|
|
"Completed" (Finish), with a "Launch LightCraft" checkbox (checked by default). Destination
|
|
Folder (issue #399) shows Program Files\LightCraft, or the installed version's folder on an
|
|
upgrade; Change... browses, and a folder that can't be used (InvalidDirDlg) is refused before
|
|
anything is installed. Failure and cancellation end on WiX's standard FatalError / UserExit
|
|
dialogs instead of the completion page. Maintenance (running the MSI again, Repair/Remove from
|
|
Apps) uses the standard maintenance dialogs; every successful run — install, repair or
|
|
remove — then ends on the shared completion page, so a successful uninstall is confirmed
|
|
with a visible final dialog (issue #892; the page itself is issue #790's fix).
|
|
|
|
This is WixUI_InstallDir without its licence-acceptance page: LightCraft is MIT OR Apache-2.0,
|
|
which ask nothing of people who just install and run it, so a click-through EULA would only
|
|
add a step. Silent (/qn) and basic-UI (/passive, /qb) installs never show these dialogs, so
|
|
they are unaffected, and nothing is launched.
|
|
|
|
The dialogs, strings and error/cancel pages come from WixToolset.UI.wixext; the side and
|
|
banner bitmaps are plain panels generated by package.ps1 (no third-party artwork).
|
|
-->
|
|
<Fragment>
|
|
<WixVariable Id="WixUIDialogBmp" Value="$(var.UiDialogBmp)" />
|
|
<WixVariable Id="WixUIBannerBmp" Value="$(var.UiBannerBmp)" />
|
|
|
|
<Property Id="WIXUI_EXITDIALOGOPTIONALTEXT" Value="LightCraft has been installed. You can start it at any time from the Start menu." />
|
|
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch LightCraft" />
|
|
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1" />
|
|
|
|
<!-- "Launch LightCraft" on Finish. WixUnelevatedShellExec (Util extension) asks the desktop
|
|
shell (Explorer) to start the program, so it runs as the signed-in user at normal
|
|
integrity even when the installer UI itself is elevated (e.g. msiexec started from an
|
|
admin prompt); it never runs from the elevated/SYSTEM server side. It is a UI-only control
|
|
event, so silent and passive installs never run it. Return="ignore": a failed launch must
|
|
not turn a successful install into an error. -->
|
|
<Property Id="WixUnelevatedShellExecTarget" Value="[#LightcraftExe]" />
|
|
<CustomAction Id="LaunchLightcraft" BinaryRef="Wix4UtilCA_$(sys.BUILDARCHSHORT)" DllEntry="WixUnelevatedShellExec" Execute="immediate" Impersonate="yes" Return="ignore" />
|
|
|
|
<UI Id="LightcraftUI">
|
|
<TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
|
|
<TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
|
|
<TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />
|
|
<Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
|
|
|
|
<DialogRef Id="ErrorDlg" />
|
|
<DialogRef Id="FatalError" />
|
|
<DialogRef Id="FilesInUse" />
|
|
<DialogRef Id="MsiRMFilesInUse" />
|
|
<DialogRef Id="PrepareDlg" />
|
|
<DialogRef Id="ProgressDlg" />
|
|
<DialogRef Id="ResumeDlg" />
|
|
<DialogRef Id="UserExit" />
|
|
<DialogRef Id="WelcomeDlg" />
|
|
<DialogRef Id="InstallDirDlg" />
|
|
<DialogRef Id="BrowseDlg" />
|
|
<DialogRef Id="InvalidDirDlg" />
|
|
<DialogRef Id="DiskCostDlg" />
|
|
<!-- Referenced by the Publish events below but never pulled in on its own: without this
|
|
ref the MSI ships without a completion page, so a successful install or remove ends
|
|
silently (issues #790, #892). The UI extension's fragment shows it on exit=success,
|
|
which covers Remove from Apps & features too. -->
|
|
<DialogRef Id="ExitDialog" />
|
|
<DialogRef Id="VerifyReadyDlg" />
|
|
<DialogRef Id="MaintenanceWelcomeDlg" />
|
|
<DialogRef Id="MaintenanceTypeDlg" />
|
|
|
|
<!-- The folder InstallDirDlg edits. -->
|
|
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />
|
|
|
|
<!-- First install / upgrade: Welcome -> Destination Folder -> Ready to install. A patch skips
|
|
the folder (it can't move an installed product). -->
|
|
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg" Condition="NOT Installed" />
|
|
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Condition="Installed AND PATCH" />
|
|
|
|
<!-- Destination Folder, as in WixUI_InstallDir: Next sets the folder, validates it (WiX's
|
|
WixUIValidatePath) and refuses one that can't be used; Change... opens the folder browser,
|
|
whose OK validates too. -->
|
|
<Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" />
|
|
<Publish Dialog="InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1" />
|
|
<Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="WixUIValidatePath_$(sys.BUILDARCHSHORT)" Order="2" Condition="NOT WIXUI_DONTVALIDATEPATH" />
|
|
<Publish Dialog="InstallDirDlg" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3" Condition="NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"" />
|
|
<Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="4" Condition="WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"" />
|
|
<Publish Dialog="InstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]" Order="1" />
|
|
<Publish Dialog="InstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2" />
|
|
<Publish Dialog="BrowseDlg" Control="OK" Event="DoAction" Value="WixUIValidatePath_$(sys.BUILDARCHSHORT)" Order="3" Condition="NOT WIXUI_DONTVALIDATEPATH" />
|
|
<Publish Dialog="BrowseDlg" Control="OK" Event="SpawnDialog" Value="InvalidDirDlg" Order="4" Condition="NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"" />
|
|
|
|
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="InstallDirDlg" Order="1" Condition="NOT Installed" />
|
|
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="3" Condition="Installed AND PATCH" />
|
|
|
|
<!-- Maintenance: Welcome -> Repair / Remove -> Ready. -->
|
|
<Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg" />
|
|
<Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg" />
|
|
<Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg" />
|
|
<Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg" />
|
|
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2" Condition="Installed AND NOT PATCH" />
|
|
|
|
<!-- Completion page: optionally launch, then close. -->
|
|
<Publish Dialog="ExitDialog" Control="Finish" Event="DoAction" Value="LaunchLightcraft" Order="1" Condition="WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 AND NOT Installed" />
|
|
<Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999" />
|
|
|
|
<!-- One feature, nothing to change: no "Change" in Apps & features. -->
|
|
<Property Id="ARPNOMODIFY" Value="1" />
|
|
</UI>
|
|
|
|
<UIRef Id="WixUI_Common" />
|
|
</Fragment>
|
|
|
|
<Fragment>
|
|
<ComponentGroup Id="LightcraftFiles" Directory="INSTALLFOLDER">
|
|
<Component Id="LightcraftApp" Guid="8A1D3A39-F7C1-47B1-97AE-40C80BF82F4A">
|
|
<File Id="LightcraftExe" Source="$(var.BinDir)\lightcraft.exe" KeyPath="yes">
|
|
<Shortcut Id="StartMenuShortcut" Directory="ProgramMenuFolder" Name="LightCraft" Description="LightCraft photo library and raw developer" WorkingDirectory="INSTALLFOLDER" Advertise="yes" Icon="LightcraftIcon.ico" IconIndex="0" />
|
|
</File>
|
|
|
|
<RegistryValue Root="HKMU" Key="Software\Microsoft\Windows\CurrentVersion\App Paths\lightcraft.exe" Value="[#LightcraftExe]" Type="string" />
|
|
<RegistryValue Root="HKMU" Key="Software\LightCraft" Name="InstallFolder" Value="[INSTALLFOLDER]" Type="string" />
|
|
<RegistryValue Root="HKMU" Key="Software\LightCraft" Name="InstallDir" Value="[INSTALLFOLDER]" Type="string" />
|
|
</Component>
|
|
|
|
<Component Id="LightcraftCli">
|
|
<File Id="LightcraftCliExe" Source="$(var.BinDir)\lightcraft-cli.exe" KeyPath="yes" />
|
|
</Component>
|
|
<Component Id="LightcraftNotice">
|
|
<File Id="LightcraftNoticeFile" Source="$(var.BinDir)\NOTICE" KeyPath="yes" />
|
|
</Component>
|
|
<Component Id="LightcraftFontLicences">
|
|
<File Id="LightcraftFontLicencesFile" Source="$(var.BinDir)\FONT-LICENCES.txt" KeyPath="yes" />
|
|
</Component>
|
|
</ComponentGroup>
|
|
</Fragment>
|
|
</Wix>
|