Initial commit of wix/main.wxs

This commit is contained in:
hustcer 2025-05-05 09:35:08 +08:00
parent 7264c66455
commit ea0b453905

View File

@ -1,468 +1,174 @@
<?xml version='1.0' encoding='windows-1252'?> <?xml version="1.0" encoding="UTF-8"?>
<!-- <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
Copyright (C) 2017 Christopher R. Field. xmlns:ui="http://wixtoolset.org/schemas/v4/wxs/ui"
xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
Licensed under the Apache License, Version 2.0 (the "License"); <?define ProductName = "Nushell" ?>
you may not use this file except in compliance with the License. <?define ApplicationFolderName = "nu" ?>
You may obtain a copy of the License at <?define ProductVersion = "$(env.NU_RELEASE_VERSION)" ?>
<?define Manufacturer = "The Nushell Project Developers" ?>
<?define UpgradeCode = "82D756D2-19FA-4F09-B10F-64942E89F364" ?>
http://www.apache.org/licenses/LICENSE-2.0 <!-- https://docs.firegiant.com/wix/schema/wxs/package/ -->
<Package
Compressed="yes"
Id="Nushell.Nushell"
InstallerVersion="500"
Scope="perUserOrMachine"
Name="$(var.ProductName)"
Version="$(var.ProductVersion)"
UpgradeCode="$(var.UpgradeCode)"
Manufacturer="$(var.Manufacturer)" >
Unless required by applicable law or agreed to in writing, software <MajorUpgrade
distributed under the License is distributed on an "AS IS" BASIS, Schedule="afterInstallInitialize"
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. DowngradeErrorMessage="A newer version of [ProductName] is already installed. Setup will now exit."/>
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- <!-- Embed cab media to MSI file -->
Please do not remove these pre-processor If-Else blocks. These are used with <Media Id="1" Cabinet="cab1.cab" EmbedCab="yes" />
the `cargo wix` subcommand to automatically determine the installation
destination for 32-bit versus 64-bit installers. Removal of these lines will
cause installation errors.
-->
<?if $(var.Platform) = x64 ?>
<?define Win64 = "yes" ?>
<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
<?else ?>
<?define Win64 = "no" ?>
<?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
<?endif ?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'> <!-- Allow install for Current User Or Machine -->
<Property Id="WixUISupportPerUser" Value="1" />
<Property Id="WixUISupportPerMachine" Value="1" />
<!-- Install for PerUser by default -->
<!-- If set to WixPerMachineFolder will install for PerMachine by default -->
<Property Id="WixAppFolder" Value="WixPerUserFolder" />
<Product <Property Id="ApplicationFolderName" Value="$(var.ApplicationFolderName)" />
Id='*'
Name='nu'
UpgradeCode='82D756D2-19FA-4F09-B10F-64942E89F364'
Manufacturer='The Nushell Project Developers'
Language='1033'
Codepage='1252'
Version='$(var.Version)'>
<Package Id='*' <!-- Per Machine Install -->
Keywords='Installer' <StandardDirectory Id="ProgramFiles64Folder">
Description='A new type of shell' <Directory Id="INSTALLDIR" Name="$(var.ApplicationFolderName)">
Manufacturer='The Nushell Project Developers' <Directory Id="BINDIR" Name="bin" />
InstallerVersion='450' </Directory>
Languages='1033' </StandardDirectory>
Compressed='yes'
InstallScope='perUser'
SummaryCodepage='1252'
Platform='$(var.Platform)'/>
<MajorUpgrade <!-- Install for Current User -->
Schedule='afterInstallInitialize' <StandardDirectory Id="LocalAppDataFolder">
DowngradeErrorMessage='A newer version of [ProductName] is already installed. Setup will now exit.'/> <Directory Id="LocalAppProgramsFolder" Name="Programs">
<Directory Id="INSTALLDIR_USER" Name="$(var.ApplicationFolderName)">
<Media Id='1' Cabinet='media1.cab' EmbedCab='yes' DiskPrompt='CD-ROM #1'/> <Directory Id="BINDIR_USER" Name="bin" />
<Property Id='DiskPrompt' Value='nu Installation'/>
<Property Id="ALLUSERS" Secure="yes" Value="2" />
<Property Id="MSIINSTALLPERUSER" Secure="yes" Value="1" />
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id='$(var.PlatformProgramFilesFolder)' Name='PFiles'>
<Directory Id='APPLICATIONFOLDER' Name='nu'>
<!--
Disabling the license sidecar file in the installer is a two step process:
1. Comment out or remove the `Component` tag along with its contents.
2. Comment out or remove the `ComponentRef` tag with the "License" Id
attribute value further down in this file.
-->
<Component Id='License' Guid='*' Win64='$(var.Win64)'>
<File Id='LicenseFile'
Name='License.rtf'
DiskId='1'
Source='wix\License.rtf'
KeyPath='yes'/>
</Component>
<Component Id='icon0' Guid='*' Win64='$(var.Win64)'>
<File
Id='icon0'
Name='nu.ico'
DiskId='1'
Source='assets/nu_logo.ico'
KeyPath='yes'/>
</Component>
<Directory Id='Bin' Name='bin'>
<Component Id='Path' Guid='285921EA-6DC0-4632-B12C-D7D737F30686' Win64='$(var.Win64)' KeyPath='yes'>
<Environment
Id='PATH'
Name='PATH'
Value='[Bin]'
Permanent='no'
Part='last'
Action='set'
System='no'/>
</Component>
<Component Id='binary0' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe0'
Name='nu.exe'
DiskId='1'
Source='target\$(var.Profile)\nu.exe'
KeyPath='yes'/>
</Component>
<!-- <Component Id='binary1' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe1'
Name='nu_plugin_binaryview.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_binaryview.exe'
KeyPath='yes'/>
</Component> -->
<Component Id='binary2' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe2'
Name='nu_plugin_inc.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_inc.exe'
KeyPath='yes'/>
</Component>
<!-- <Component Id='binary3' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe3'
Name='nu_plugin_start.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_start.exe'
KeyPath='yes'/>
</Component>
<Component Id='binary4' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe4'
Name='nu_plugin_textview.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_textview.exe'
KeyPath='yes'/>
</Component>
<Component Id='binary5' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe5'
Name='nu_plugin_tree.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_tree.exe'
KeyPath='yes'/>
</Component> -->
<!-- Downloaded from here https://github.com/jftuga/less-Windows/releases/download/less-v562.0/less.exe -->
<Component Id='binary6' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe6'
Name='less.exe'
DiskId='1'
Source='output\less.exe'
KeyPath='yes'/>
</Component>
<!-- <Component Id='binary7' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe7'
Name='nu_plugin_match.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_match.exe'
KeyPath='yes'/>
</Component> -->
<Component Id='binary8' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe8'
Name='README.txt'
DiskId='1'
Source='output\README.txt'
KeyPath='yes'/>
</Component>
<Component Id='binary9' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe9'
Name='LICENSE'
DiskId='1'
Source='output\LICENSE'
KeyPath='yes'/>
</Component>
<Component Id='binary10' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe10'
Name='LICENSE-for-less.txt'
DiskId='1'
Source='output\LICENSE-for-less.txt'
KeyPath='yes'/>
</Component>
<!-- <Component Id='binary11' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe11'
Name='nu_plugin_s3.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_s3.exe'
KeyPath='yes'/>
</Component>
<Component Id='binary12' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe12'
Name='nu_plugin_chart_bar.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_chart_bar.exe'
KeyPath='yes'/>
</Component>
<Component Id='binary13' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe13'
Name='nu_plugin_chart_line.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_chart_line.exe'
KeyPath='yes'/>
</Component> -->
<Component Id='binary14' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe14'
Name='nu_plugin_query.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_query.exe'
KeyPath='yes'/>
</Component>
<!-- <Component Id='binary15' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe15'
Name='nu_plugin_from_bson.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_from_bson.exe'
KeyPath='yes'/>
</Component>
<Component Id='binary16' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe16'
Name='nu_plugin_to_bson.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_to_bson.exe'
KeyPath='yes'/>
</Component>
<Component Id='binary17' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe17'
Name='nu_plugin_from_sqlite.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_from_sqlite.exe'
KeyPath='yes'/>
</Component>
<Component Id='binary18' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe18'
Name='nu_plugin_to_sqlite.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_to_sqlite.exe'
KeyPath='yes'/>
</Component>
<Component Id='binary19' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe19'
Name='nu_plugin_selector.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_selector.exe'
KeyPath='yes'/>
</Component>
<Component Id='binary20' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe20'
Name='nu_plugin_query_json.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_query_json.exe'
KeyPath='yes'/>
</Component>
<Component Id='binary21' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe21'
Name='nu_plugin_example.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_example.exe'
KeyPath='yes'/>
</Component> -->
<Component Id='binary22' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe22'
Name='nu_plugin_gstat.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_gstat.exe'
KeyPath='yes'/>
</Component>
<!--
<Component Id='binary23' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe23'
Name='nu_plugin_stream_example.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_stream_example.exe'
KeyPath='yes'/>
</Component>
-->
<Component Id='binary24' Guid='*' Win64='$(var.Win64)'>
<File
Id='exe24'
Name='nu_plugin_polars.exe'
DiskId='1'
Source='target\$(var.Profile)\nu_plugin_polars.exe'
KeyPath='yes'/>
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id='LocalAppDataFolder'>
<Directory Id='AppDataMicrosoftFolder' Name='Microsoft'>
<Directory Id='AppDataWindowsTerminalFolder' Name='Windows Terminal'>
<Directory Id='WindowsTerminalProfileFolder' Name='Fragments'>
<Directory Id='WindowsTerminalProfileAppFolder' Name='nu'>
<Component Id='WindowsTerminalProfile' Guid='957239F4-7B87-4399-9F91-7DF2ABE5ED8B' Win64='$(var.Win64)'>
<File
Id='WindowsTerminalProfileFile'
Name='nu.json'
DiskId='1'
Source='wix\windows-terminal-profile.json'
System='no'/>
<RegistryKey Root='HKCU' Key='Software\nu'>
<RegistryValue Name='WindowsTerminalProfile' Value='1' Type='integer' KeyPath='yes'/>
</RegistryKey>
<RemoveFolder Id='RemoveWindowsTerminalProfileFolder1' Directory='WindowsTerminalProfileAppFolder' On='uninstall'/>
<RemoveFolder Id='RemoveWindowsTerminalProfileFolder2' Directory='WindowsTerminalProfileFolder' On='uninstall'/>
<RemoveFolder Id='RemoveWindowsTerminalProfileFolder3' Directory='AppDataWindowsTerminalFolder' On='uninstall'/>
<RemoveFolder Id='RemoveWindowsTerminalProfileFolder4' Directory='AppDataMicrosoftFolder' On='uninstall'/>
</Component>
</Directory>
</Directory>
</Directory>
</Directory>
</Directory>
</Directory> </Directory>
</Directory>
</StandardDirectory>
<Feature <ComponentGroup Id="NushellBinaries" Directory="BINDIR">
Id='Binaries' <Component Id="Nu_Main" Guid="*">
Title='Application' <File Id="nu.exe" Source="$(var.SourceDir)\nu.exe" KeyPath="yes" />
Description='Installs all binaries and the license.' </Component>
Level='1' <Component Id="Nu_Plugin_Inc" Guid="*">
ConfigurableDirectory='APPLICATIONFOLDER' <File Id="nu_plugin_inc.exe" Source="$(var.SourceDir)\nu_plugin_inc.exe" KeyPath="yes" />
AllowAdvertise='no' </Component>
Display='expand' <Component Id="Nu_Plugin_Gstat" Guid="*">
Absent='disallow'> <File Id="nu_plugin_gstat.exe" Source="$(var.SourceDir)\nu_plugin_gstat.exe" KeyPath="yes" />
<!-- </Component>
Comment out or remove the following `ComponentRef` tag to remove <Component Id="Nu_Plugin_Query" Guid="*">
the license sidecar file from the installer. <File Id="nu_plugin_query.exe" Source="$(var.SourceDir)\nu_plugin_query.exe" KeyPath="yes" />
--> </Component>
<ComponentRef Id='License'/> <Component Id="Nu_Plugin_Polars" Guid="*">
<File Id="nu_plugin_polars.exe" Source="$(var.SourceDir)\nu_plugin_polars.exe" KeyPath="yes" />
</Component>
<Component Id="Nu_Plugin_Formats" Guid="*">
<File Id="nu_plugin_formats.exe" Source="$(var.SourceDir)\nu_plugin_formats.exe" KeyPath="yes" />
</Component>
</ComponentGroup>
<ComponentRef Id='icon0'/> <!-- License and Icon in main directory -->
<ComponentGroup Id="NushellResources" Directory="INSTALLDIR">
<Component Id="Nu_Icon" Guid="*">
<File Id="nu.ico" Source="$(var.ProjectDir)\nu.ico" KeyPath="yes" />
</Component>
<Component Id="Nu_License" Guid="*">
<File Id="License.rtf" Source="$(var.ProjectDir)\License.rtf" KeyPath="yes" />
</Component>
</ComponentGroup>
<ComponentRef Id='binary0'/> <!-- Environment PATH variable components - separated for per-user and per-machine -->
<!-- <ComponentRef Id='binary1'/> --> <DirectoryRef Id="BINDIR">
<ComponentRef Id='binary2'/> <!-- Per-user PATH component -->
<!-- <ComponentRef Id='binary3'/> <Component Id="EnvironmentPathUser" Guid="{D6A3A7B2-1F3A-4B6A-8A3B-3A7B2D6A3A7B}" Condition="MSIINSTALLPERUSER=1">
<ComponentRef Id='binary4'/> <Environment Id="PATHUser"
<ComponentRef Id='binary5'/> --> Name="PATH"
<ComponentRef Id='binary6'/> Value="[BINDIR]"
<!-- <ComponentRef Id='binary7'/> --> Permanent="no"
<ComponentRef Id='binary8'/> Part="last"
<ComponentRef Id='binary9'/> Action="set"
<ComponentRef Id='binary10'/> System="no"/>
<!-- <ComponentRef Id='binary11'/> <RegistryValue Root="HKCU"
<ComponentRef Id='binary12'/> Key="Software\nu"
<ComponentRef Id='binary13'/> --> Name="installed"
<ComponentRef Id='binary14'/> Type="integer"
<!-- <ComponentRef Id='binary15'/> Value="1"
<ComponentRef Id='binary16'/> KeyPath="yes"/>
<ComponentRef Id='binary17'/> </Component>
<ComponentRef Id='binary18'/>
<ComponentRef Id='binary19'/>
<ComponentRef Id='binary20'/>
<ComponentRef Id='binary21'/> -->
<ComponentRef Id='binary22'/>
<!-- <ComponentRef Id='binary23'/> -->
<ComponentRef Id='binary24'/>
<Feature <!-- Per-machine PATH component -->
Id='Environment' <Component Id="EnvironmentPathMachine" Guid="{47781325-8A2B-4F8D-A058-9A2C4136E25F}" Condition="ALLUSERS=1">
Title='PATH Environment Variable' <Environment Id="PATHMachine"
Description='Add the install location of the [ProductName] executable to the PATH system environment variable. This allows the [ProductName] executable to be called from any location.' Name="PATH"
Level='1' Value="[BINDIR]"
Absent='allow'> Permanent="no"
<ComponentRef Id='Path'/> Part="last"
</Feature> Action="set"
System="yes"/>
<RegistryValue Root="HKLM"
Key="Software\nu"
Name="installed"
Type="integer"
Value="1"
KeyPath="yes"/>
</Component>
</DirectoryRef>
<Feature <!-- Main feature set -->
Id='WindowsTerminalProfile' <Feature Id="ProductFeature" Title="Nushell" Level="1">
Title='Windows Terminal Profile' <ComponentGroupRef Id="NushellBinaries" />
Description='Add [ProductName] profile to Windows Terminal.' <ComponentGroupRef Id="NushellResources" />
Level='1' <ComponentRef Id="EnvironmentPathUser" />
Absent='allow'> <ComponentRef Id="EnvironmentPathMachine" />
<ComponentRef Id='WindowsTerminalProfile'/> </Feature>
</Feature>
</Feature>
<SetProperty Id='ARPINSTALLLOCATION' Value='[APPLICATIONFOLDER]' After='CostFinalize'/> <!-- Load Advanced UI -->
<WixVariable Id="WixUILicenseRtf" Value="$(var.ProjectDir)\License.rtf" />
<ui:WixUI Id="WixUI_Advanced" />
<Icon Id='ProductICO' SourceFile='assets/nu_logo.ico'/> <!-- Windows Version Check -->
<Property Id='ARPPRODUCTICON' Value='ProductICO' /> <Launch Condition="VersionNT >= 601" Message="This application requires Windows 7 or later." />
<Property Id='ARPHELPLINK' Value='https://www.nushell.sh/book/'/> <!-- Arch checking -->
<?if $(sys.BUILDARCH) = x64 ?>
<Launch Condition="VersionNT64" Message="This installation package is only supported on 64-bit Windows." />
<?endif?>
<!-- for Value, see https://learn.microsoft.com/en-ca/windows/win32/msi/formatted --> <?if $(sys.BUILDARCH) = arm64 ?>
<SetProperty <Launch Condition="ProcessorArchitecture = 'ARM64'" Message="This installation package is only supported on ARM64 Windows." />
Id="ReplacePathsInWindowsTerminalProfile" <?endif?>
Sequence="execute"
Value="&quot;[#exe0]&quot; -c &quot;let doc = (open `[#WindowsTerminalProfileFile]` | update profiles.commandline `[#exe0]` | update profiles.icon `[#icon0]`); $doc | save -f `[#WindowsTerminalProfileFile]`&quot;"
After='CostFinalize'/>
<CustomAction
Id="ReplacePathsInWindowsTerminalProfile"
BinaryKey="WixCA"
DllEntry="CAQuietExec"
Execute="deferred"
Return="check"
Impersonate="yes"/>
<InstallExecuteSequence>
<Custom Action='ReplacePathsInWindowsTerminalProfile' Before='InstallFinalize'>
<!-- Run the custom action if the feature is enabled -->
<![CDATA[&WindowsTerminalProfile=3 OR (!WindowsTerminalProfile=3 AND REINSTALL<>"")]]>
</Custom>
</InstallExecuteSequence>
<UI> <SetProperty Id="INSTALLDIR"
<UIRef Id='WixUI_FeatureTree'/> Action="SetINSTALLDIR_User"
<!-- Value="[INSTALLDIR_USER]"
Disabling the EULA dialog in the installer is a two step process: After="AppSearch"
Condition="MSIINSTALLPERUSER=1"
1. Uncomment the following two `Publish` tags Sequence="both"/>
2. Comment out or remove the `<WiXVariable Id='WixUILicenseRtf'...` tag further down <SetProperty Id="BINDIR"
Action="SetBINDIR_User"
--> Value="[BINDIR_USER]"
<!--<Publish Dialog='WelcomeDlg' Control='Next' Event='NewDialog' Value='CustomizeDlg' Order='99'>1</Publish>--> After="AppSearch"
<!--<Publish Dialog='CustomizeDlg' Control='Back' Event='NewDialog' Value='WelcomeDlg' Order='99'>1</Publish>--> Condition="MSIINSTALLPERUSER=1"
Sequence="both"/>
</UI>
<!--
Disabling the EULA dialog in the installer requires commenting out
or removing the following `WixVariable` tag
-->
<WixVariable Id='WixUILicenseRtf' Value='wix\License.rtf'/>
<!--
Uncomment the next `WixVariable` tag to customize the installer's
Graphical User Interface (GUI) and add a custom banner image across
the top of each screen. See the WiX Toolset documentation for details
about customization.
The banner BMP dimensions are 493 x 58 pixels.
-->
<!--<WixVariable Id='WixUIBannerBmp' Value='wix\Banner.bmp'/>-->
<!--
Uncomment the next `WixVariable` tag to customize the installer's
Graphical User Interface (GUI) and add a custom image to the first
dialog, or screen. See the WiX Toolset documentation for details about
customization.
The dialog BMP dimensions are 493 x 312 pixels.
-->
<!--<WixVariable Id='WixUIDialogBmp' Value='wix\Dialog.bmp'/>-->
</Product>
<!-- If Installed with ALLUSERS=1 set the default Install dir to ProgramFiles64Folder -->
<SetProperty Id="INSTALLDIR"
Action="SetINSTALLDIR_Machine"
Value="[ProgramFiles64Folder][ApplicationFolderName]"
After="AppSearch"
Condition="ALLUSERS=1"
Sequence="both"/>
<SetProperty Id="BINDIR"
Action="SetBINDIR_Machine"
Value="[ProgramFiles64Folder][ApplicationFolderName]\bin"
After="AppSearch"
Condition="ALLUSERS=1"
Sequence="both"/>
</Package>
</Wix> </Wix>