Add WindowsTerminalProfile feature for installation

This commit is contained in:
hustcer 2025-05-07 08:11:51 +08:00
parent 9855085fb7
commit deacd569ef
2 changed files with 87 additions and 35 deletions

View File

@ -29,6 +29,7 @@
<BindPath Include="." />
<Content Include="nu.ico" />
<Content Include="License.rtf" />
<Content Include="windows-terminal-profile.json" />
</ItemGroup>
</Project>

View File

@ -54,6 +54,31 @@
<Directory Id="BINDIR_USER" Name="bin" />
</Directory>
</Directory>
<!-- Windows Terminal Profile Directories -->
<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">
<File Id="WindowsTerminalProfileFile"
Name="nu.json"
Source="$(var.ProjectDir)\windows-terminal-profile.json" />
<RegistryValue Root="HKCU"
Key="Software\nu"
Name="WindowsTerminalProfile"
Value="1"
Type="integer"
KeyPath="yes" />
<RemoveFolder Id="RemoveWindowsTerminalProfileFolderA" Directory="WindowsTerminalProfileAppFolder" On="uninstall" />
<RemoveFolder Id="RemoveWindowsTerminalProfileFolderB" Directory="WindowsTerminalProfileFolder" On="uninstall" />
<RemoveFolder Id="RemoveWindowsTerminalProfileFolderC" Directory="AppDataWindowsTerminalFolder" On="uninstall" />
<RemoveFolder Id="RemoveWindowsTerminalProfileFolderD" Directory="AppDataMicrosoftFolder" On="uninstall" />
</Component>
</Directory>
</Directory>
</Directory>
</Directory>
</StandardDirectory>
<ComponentGroup Id="NushellBinaries" Directory="BINDIR">
@ -132,6 +157,14 @@
<ComponentRef Id="EnvironmentPathMachine" />
</Feature>
<!-- Windows Terminal Profile Feature -->
<Feature Id="WindowsTerminalProfile"
Title="Windows Terminal Profile"
Description="Add $(var.ProductName) profile to Windows Terminal."
Level="1">
<ComponentRef Id="WindowsTerminalProfile" />
</Feature>
<!-- Load Advanced UI -->
<WixVariable Id="WixUILicenseRtf" Value="$(var.ProjectDir)\License.rtf" />
<ui:WixUI Id="WixUI_Advanced" />
@ -174,5 +207,23 @@
After="AppSearch"
Condition="ALLUSERS=1"
Sequence="both" />
<!-- Custom Action for Windows Terminal Profile -->
<SetProperty Id="ReplacePathsInWindowsTerminalProfile"
Sequence="execute"
Value="&quot;[#nu.exe]&quot; -c &quot;let doc = (open `[#WindowsTerminalProfileFile]` | update profiles.commandline `[#nu.exe]` | update profiles.icon `[#nu.ico]`); $doc | save -f `[#WindowsTerminalProfileFile]`&quot;"
After="CostFinalize" />
<CustomAction Id="ReplacePathsInWindowsTerminalProfile"
Return="check"
Impersonate="yes"
Execute="deferred"
DllEntry="WixQuietExec"
BinaryRef="Wix4UtilCA_X64" />
<InstallExecuteSequence>
<Custom Action="ReplacePathsInWindowsTerminalProfile" Before="InstallFinalize"
Condition="(&amp;WindowsTerminalProfile=3) OR ((!WindowsTerminalProfile=3) AND (REINSTALL&lt;&gt;&quot;&quot;))"/>
</InstallExecuteSequence>
</Package>
</Wix>