mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-07-30 07:44:13 +02:00
69c595fdb8
The MSI registers both shortcuts with the arguments QET needs to find its
data ("Point directly to qelectrotech.exe with all required arguments"),
but the QElectroTech.Document\shell\open\command registry value was
written without them:
"[INSTALLDIR]bin\qelectrotech.exe" "%1"
Launching from the Start Menu therefore works, while double-clicking a
.qet file does not: Explorer sets the working directory to the document's
folder, and the compiled-in data paths are relative, so nothing is found
there. The most visible symptom is the interface always coming up in
French, because no translation loads and the source strings are French.
Give the file association the same arguments as the shortcuts.
Reported by mr-rfh in #554, who diagnosed it and arrived at exactly this
registry value by hand.
170 lines
8.2 KiB
XML
170 lines
8.2 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!--
|
|
QElectroTech.wxs - WiX v7 installer definition
|
|
Generates a self-contained x64 MSI for QElectroTech (MSYS2/UCRT64 build).
|
|
|
|
Variables passed from the wix build command line:
|
|
-d FilesDir=<absolute path to artifact\files>
|
|
-d Version=<numeric version e.g. 0.100.1.0>
|
|
-d ProductVersion=<display version e.g. 0.100.1-r8770-abc1234_x86_64-win64>
|
|
-d LicenseRtf=<absolute path to License.rtf>
|
|
-->
|
|
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
|
|
xmlns:ui="http://wixtoolset.org/schemas/v4/wxs/ui">
|
|
<?ifndef QtPlatformArgs ?>
|
|
<?define QtPlatformArgs="" ?>
|
|
<?endif?>
|
|
|
|
<Package
|
|
Name="QElectroTech"
|
|
Manufacturer="QElectroTech Team"
|
|
Version="$(var.Version)"
|
|
ProductCode="$(var.ProductCode)"
|
|
UpgradeCode="A1B2C3D4-E5F6-7890-ABCD-EF1234567890"
|
|
Language="1033"
|
|
Codepage="1252"
|
|
InstallerVersion="500"
|
|
Scope="perMachine">
|
|
|
|
<!-- Embed all cabinet files inside the MSI (self-contained installer) -->
|
|
<MediaTemplate EmbedCab="yes" CompressionLevel="high" />
|
|
|
|
<!-- In-place upgrade: automatically uninstalls the previous version -->
|
|
<MajorUpgrade
|
|
DowngradeErrorMessage="A newer version of QElectroTech is already installed."
|
|
AllowSameVersionUpgrades="yes"
|
|
Schedule="afterInstallInitialize" />
|
|
|
|
<!-- Installation directory -->
|
|
<StandardDirectory Id="ProgramFiles64Folder">
|
|
<Directory Id="INSTALLDIR" Name="QElectroTech" />
|
|
</StandardDirectory>
|
|
|
|
<!-- ============================================================
|
|
All application files harvested in one pass from files\**
|
|
(Lancer QET.bat has been removed from the artifact before
|
|
this build — see windows-msi.yml step "Remove Lancer QET.bat")
|
|
============================================================ -->
|
|
<ComponentGroup Id="CG_AllFiles" Directory="INSTALLDIR">
|
|
<Files Include="$(var.FilesDir)\**" />
|
|
</ComponentGroup>
|
|
|
|
<!-- ============================================================
|
|
Desktop + Start Menu shortcuts
|
|
Point directly to qelectrotech.exe with all required arguments.
|
|
No .bat wrapper needed.
|
|
============================================================ -->
|
|
<ComponentGroup Id="CG_Shortcuts" Directory="INSTALLDIR">
|
|
|
|
<Component Id="C_ShortcutDesktop" Guid="F1A2B3C4-D5E6-7890-5678-012345678901">
|
|
<Shortcut Id="DesktopShortcut"
|
|
Directory="DesktopFolder"
|
|
Name="QElectroTech"
|
|
Target="[INSTALLDIR]bin\qelectrotech.exe"
|
|
Arguments="--common-elements-dir="[INSTALLDIR]elements/" --common-tbt-dir="[INSTALLDIR]titleblocks/" --lang-dir="[INSTALLDIR]lang/" $(var.QtPlatformArgs)"
|
|
Icon="qet.ico"
|
|
WorkingDirectory="INSTALLDIR" />
|
|
<RegistryValue Root="HKCU"
|
|
Key="Software\QElectroTech"
|
|
Name="DesktopShortcut"
|
|
Type="integer" Value="1"
|
|
KeyPath="yes" />
|
|
</Component>
|
|
|
|
<Component Id="C_ShortcutStartMenu" Guid="A2B3C4D5-E6F7-8901-6789-123456789012">
|
|
<Shortcut Id="StartMenuShortcut"
|
|
Directory="ProgramMenuFolder"
|
|
Name="QElectroTech"
|
|
Target="[INSTALLDIR]bin\qelectrotech.exe"
|
|
Arguments="--common-elements-dir="[INSTALLDIR]elements/" --common-tbt-dir="[INSTALLDIR]titleblocks/" --lang-dir="[INSTALLDIR]lang/" $(var.QtPlatformArgs)"
|
|
Icon="qet.ico"
|
|
WorkingDirectory="INSTALLDIR" />
|
|
<RegistryValue Root="HKCU"
|
|
Key="Software\QElectroTech"
|
|
Name="StartMenuShortcut"
|
|
Type="integer" Value="1"
|
|
KeyPath="yes" />
|
|
</Component>
|
|
|
|
</ComponentGroup>
|
|
|
|
<!-- ============================================================
|
|
.qet file association
|
|
============================================================ -->
|
|
<ComponentGroup Id="CG_FileAssoc" Directory="INSTALLDIR">
|
|
<Component Id="C_FileAssoc" Guid="B3C4D5E6-F7A8-9012-7890-234567890123">
|
|
<RegistryValue Root="HKCR" Key=".qet" Type="string" Value="QElectroTech.Document" KeyPath="yes" />
|
|
<RegistryValue Root="HKCR" Key="QElectroTech.Document" Type="string" Value="QElectroTech Project" />
|
|
<RegistryValue Root="HKCR" Key="QElectroTech.Document\DefaultIcon" Type="string"
|
|
Value="[INSTALLDIR]ico\qelectrotech.ico" />
|
|
<!-- Pass the same arguments as the shortcuts above: opening a .qet from
|
|
Explorer sets the working directory to the document's folder, so a
|
|
bare command line leaves QET unable to locate its data. Without the
|
|
lang-dir argument the UI falls back to the source language, which
|
|
is French. See issue #554. -->
|
|
<RegistryValue Root="HKCR" Key="QElectroTech.Document\shell\open\command" Type="string"
|
|
Value=""[INSTALLDIR]bin\qelectrotech.exe" --common-elements-dir="[INSTALLDIR]elements/" --common-tbt-dir="[INSTALLDIR]titleblocks/" --lang-dir="[INSTALLDIR]lang/" $(var.QtPlatformArgs) "%1"" />
|
|
</Component>
|
|
</ComponentGroup>
|
|
|
|
<!-- ============================================================
|
|
Icon for shortcuts
|
|
============================================================ -->
|
|
<Icon Id="qet.ico" SourceFile="$(var.FilesDir)\ico\qelectrotech.ico" />
|
|
|
|
<!-- ============================================================
|
|
CustomAction: set elements\ subtree read-only after install
|
|
|
|
Pattern used: two-step SetProperty + Exec
|
|
1. CA_ResolveElementsPath (immediate, SetProperty):
|
|
copies the runtime value of INSTALLDIR into the property
|
|
ELEMENTS_READONLY_CMD, building the full powershell command.
|
|
2. CA_SetElementsReadOnly (deferred, Execute="deferred"):
|
|
runs the command stored in ELEMENTS_READONLY_CMD.
|
|
|
|
This is the correct WiX v4/v7 pattern for passing a
|
|
directory path (resolved at runtime) to a deferred CA.
|
|
============================================================ -->
|
|
|
|
<!-- Step 1: build the powershell command with the resolved INSTALLDIR -->
|
|
<CustomAction Id="CA_ResolveElementsPath"
|
|
Property="CA_SetElementsReadOnly"
|
|
Value="powershell.exe -NonInteractive -NoProfile -WindowStyle Hidden -Command "Get-ChildItem -LiteralPath '[INSTALLDIR]elements' -Recurse -File | ForEach-Object { `$_.IsReadOnly = `$true }"" />
|
|
|
|
<!-- Step 2: deferred execution of the powershell command -->
|
|
<CustomAction Id="CA_SetElementsReadOnly"
|
|
BinaryRef="Wix4UtilCA_X86"
|
|
DllEntry="WixQuietExec"
|
|
Execute="deferred"
|
|
Impersonate="no"
|
|
Return="ignore" />
|
|
|
|
<InstallExecuteSequence>
|
|
<Custom Action="CA_ResolveElementsPath" After="InstallFiles" Condition="NOT Installed AND NOT REMOVE" />
|
|
<Custom Action="CA_SetElementsReadOnly" After="CA_ResolveElementsPath" Condition="NOT Installed AND NOT REMOVE" />
|
|
</InstallExecuteSequence>
|
|
|
|
<!-- ============================================================
|
|
Main feature (everything included)
|
|
============================================================ -->
|
|
<Feature Id="ProductFeature" Title="QElectroTech" Level="1">
|
|
<ComponentGroupRef Id="CG_AllFiles" />
|
|
<ComponentGroupRef Id="CG_Shortcuts" />
|
|
<ComponentGroupRef Id="CG_FileAssoc" />
|
|
</Feature>
|
|
|
|
<!-- WixUI_Minimal with QElectroTech GPL-2 license -->
|
|
<ui:WixUI Id="WixUI_Minimal" />
|
|
|
|
<!-- WixVariable without ui: namespace, at Package level -->
|
|
<WixVariable Id="WixUILicenseRtf" Value="$(var.LicenseRtf)" />
|
|
|
|
<!-- Properties shown in Programs and Features -->
|
|
<Property Id="ARPPRODUCTICON" Value="qet.ico" />
|
|
<Property Id="ARPHELPLINK" Value="https://qelectrotech.org" />
|
|
<Property Id="ARPURLINFOABOUT" Value="https://qelectrotech.org" />
|
|
<Property Id="ARPCOMMENTS" Value="Free electrical schematic editor" />
|
|
|
|
</Package>
|
|
</Wix>
|