From df442c81e3c1cf30689965f24d0103c42f497978 Mon Sep 17 00:00:00 2001 From: ispyisail Date: Tue, 29 Sep 2026 21:59:53 +1300 Subject: [PATCH] Fix register_filetypes.bat for the portable ZIP and for non-admin users The Windows portable ZIP ships "Lancer QET_qt6.bat", but the script only looked for "Lancer QET.bat", so it stopped at its first check and never registered anything. It now tries the ZIP's name first and falls back to the installer's. It also wrote to HKEY_CLASSES_ROOT, which a standard (non-admin) Windows account cannot create keys in. It now writes to HKEY_CURRENT_USER\Software\Classes: per-user, no elevation needed, and Windows merges it into HKEY_CLASSES_ROOT for that user. qet_uninstall_file_associations.reg removes the HKCU keys first, then the old HKEY_CLASSES_ROOT ones as before. Tested under Wine 10 on the git10275 nightly ZIP: the old script aborts ("Lancer QET.bat ... n'a pas ete trouve"), the new one registers .qet, .elmt and .titleblock under HKCU with nothing under HKLM, the uninstall file removes them, and the "Lancer QET.bat" fallback works. Wine does not enforce admin rights, so the non-admin case itself is not proven there. Reported in #1148. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../files/qet_uninstall_file_associations.reg | 7 +++++ .../nsis_base/files/register_filetypes.bat | 31 ++++++++++--------- misc/qet_uninstall_file_associations.reg | 7 +++++ misc/register_filetypes.bat | 31 ++++++++++--------- 4 files changed, 48 insertions(+), 28 deletions(-) diff --git a/build-aux/windows/nsis_base/files/qet_uninstall_file_associations.reg b/build-aux/windows/nsis_base/files/qet_uninstall_file_associations.reg index c5d0b0a7f..5de5bbc75 100644 --- a/build-aux/windows/nsis_base/files/qet_uninstall_file_associations.reg +++ b/build-aux/windows/nsis_base/files/qet_uninstall_file_associations.reg @@ -1,5 +1,12 @@ Windows Registry Editor Version 5.00 +[-HKEY_CURRENT_USER\Software\Classes\Applications\qelectrotech.exe\shell\open\command] +[-HKEY_CURRENT_USER\Software\Classes\.qet] +[-HKEY_CURRENT_USER\Software\Classes\qet_diagram_file] +[-HKEY_CURRENT_USER\Software\Classes\.elmt] +[-HKEY_CURRENT_USER\Software\Classes\qet_element_file] +[-HKEY_CURRENT_USER\Software\Classes\.titleblock] +[-HKEY_CURRENT_USER\Software\Classes\qet_titleblock_file] [-HKEY_CLASSES_ROOT\Applications\qelectrotech.exe\shell\open\command] [-HKEY_CLASSES_ROOT\.qet] [-HKEY_CLASSES_ROOT\qet_diagram_file] diff --git a/build-aux/windows/nsis_base/files/register_filetypes.bat b/build-aux/windows/nsis_base/files/register_filetypes.bat index 29b429367..d0f2d69be 100644 --- a/build-aux/windows/nsis_base/files/register_filetypes.bat +++ b/build-aux/windows/nsis_base/files/register_filetypes.bat @@ -5,7 +5,9 @@ rem detecte le dossier courant et suppose que celui-ci contient bin\qelectrotech set current_dir=%~dp0 cd /d %current_dir% -set expected_qet_exe=%current_dir%Lancer QET.bat +rem l'archive portable fournit "Lancer QET_qt6.bat", l'installeur "Lancer QET.bat" +set expected_qet_exe=%current_dir%Lancer QET_qt6.bat +if not exist "%expected_qet_exe%" set expected_qet_exe=%current_dir%Lancer QET.bat set expected_project_ico=%current_dir%ico\application-x-qet-project.ico set expected_element_ico=%current_dir%ico\application-x-qet-element.ico set expected_titleblock_ico=%current_dir%ico\application-x-qet-titleblock.ico @@ -45,49 +47,50 @@ set final_element_ico=%expected_element_ico:\=\\% set final_titleblock_ico=%expected_titleblock_ico:\=\\% rem genere le fichier .reg pour enregistrer les associations de fichiers +rem HKEY_CURRENT_USER : ne demande pas les droits administrateur set reg_file=qet_install_file_associations.reg ( echo Windows Registry Editor Version 5.00 echo. rem Declaration de l'application - echo [HKEY_CLASSES_ROOT\Applications\qelectrotech.exe\shell\open\command] + echo [HKEY_CURRENT_USER\Software\Classes\Applications\qelectrotech.exe\shell\open\command] echo @="\"%final_qet_exe%\" \"%%1\"" rem association de fichier *.qet - echo [HKEY_CLASSES_ROOT\.qet] + echo [HKEY_CURRENT_USER\Software\Classes\.qet] echo @="qet_diagram_file" - echo [HKEY_CLASSES_ROOT\qet_diagram_file] + echo [HKEY_CURRENT_USER\Software\Classes\qet_diagram_file] echo @="QET diagram" echo "EditFlags"=dword:00000000 echo "BrowserFlags"=dword:00000008 - echo [HKEY_CLASSES_ROOT\qet_diagram_file\DefaultIcon] + echo [HKEY_CURRENT_USER\Software\Classes\qet_diagram_file\DefaultIcon] echo @="%final_project_ico%,0" - echo [HKEY_CLASSES_ROOT\qet_diagram_file\shell\open\command] + echo [HKEY_CURRENT_USER\Software\Classes\qet_diagram_file\shell\open\command] echo @="\"%final_qet_exe%\" \"%%1\"" rem association de fichier *.elmt - echo [HKEY_CLASSES_ROOT\.elmt] + echo [HKEY_CURRENT_USER\Software\Classes\.elmt] echo @="qet_element_file" - echo [HKEY_CLASSES_ROOT\qet_element_file] + echo [HKEY_CURRENT_USER\Software\Classes\qet_element_file] echo @="QET element" echo "EditFlags"=dword:00000000 echo "BrowserFlags"=dword:00000008 - echo [HKEY_CLASSES_ROOT\qet_element_file\DefaultIcon] + echo [HKEY_CURRENT_USER\Software\Classes\qet_element_file\DefaultIcon] echo @="%final_element_ico%,0" - echo [HKEY_CLASSES_ROOT\qet_element_file\shell\open\command] + echo [HKEY_CURRENT_USER\Software\Classes\qet_element_file\shell\open\command] echo @="\"%final_qet_exe%\" \"%%1\"" rem association de fichier *.titleblock - echo [HKEY_CLASSES_ROOT\.titleblock] + echo [HKEY_CURRENT_USER\Software\Classes\.titleblock] echo @="qet_titleblock_file" - echo [HKEY_CLASSES_ROOT\qet_titleblock_file] + echo [HKEY_CURRENT_USER\Software\Classes\qet_titleblock_file] echo @="QET title block template" echo "EditFlags"=dword:00000000 echo "BrowserFlags"=dword:00000008 - echo [HKEY_CLASSES_ROOT\qet_titleblock_file\DefaultIcon] + echo [HKEY_CURRENT_USER\Software\Classes\qet_titleblock_file\DefaultIcon] echo @="%final_titleblock_ico%,0" - echo [HKEY_CLASSES_ROOT\qet_titleblock_file\shell\open\command] + echo [HKEY_CURRENT_USER\Software\Classes\qet_titleblock_file\shell\open\command] echo @="\"%final_qet_exe%\" \"%%1\"" ) > %reg_file% diff --git a/misc/qet_uninstall_file_associations.reg b/misc/qet_uninstall_file_associations.reg index c5d0b0a7f..5de5bbc75 100644 --- a/misc/qet_uninstall_file_associations.reg +++ b/misc/qet_uninstall_file_associations.reg @@ -1,5 +1,12 @@ Windows Registry Editor Version 5.00 +[-HKEY_CURRENT_USER\Software\Classes\Applications\qelectrotech.exe\shell\open\command] +[-HKEY_CURRENT_USER\Software\Classes\.qet] +[-HKEY_CURRENT_USER\Software\Classes\qet_diagram_file] +[-HKEY_CURRENT_USER\Software\Classes\.elmt] +[-HKEY_CURRENT_USER\Software\Classes\qet_element_file] +[-HKEY_CURRENT_USER\Software\Classes\.titleblock] +[-HKEY_CURRENT_USER\Software\Classes\qet_titleblock_file] [-HKEY_CLASSES_ROOT\Applications\qelectrotech.exe\shell\open\command] [-HKEY_CLASSES_ROOT\.qet] [-HKEY_CLASSES_ROOT\qet_diagram_file] diff --git a/misc/register_filetypes.bat b/misc/register_filetypes.bat index 29b429367..d0f2d69be 100755 --- a/misc/register_filetypes.bat +++ b/misc/register_filetypes.bat @@ -5,7 +5,9 @@ rem detecte le dossier courant et suppose que celui-ci contient bin\qelectrotech set current_dir=%~dp0 cd /d %current_dir% -set expected_qet_exe=%current_dir%Lancer QET.bat +rem l'archive portable fournit "Lancer QET_qt6.bat", l'installeur "Lancer QET.bat" +set expected_qet_exe=%current_dir%Lancer QET_qt6.bat +if not exist "%expected_qet_exe%" set expected_qet_exe=%current_dir%Lancer QET.bat set expected_project_ico=%current_dir%ico\application-x-qet-project.ico set expected_element_ico=%current_dir%ico\application-x-qet-element.ico set expected_titleblock_ico=%current_dir%ico\application-x-qet-titleblock.ico @@ -45,49 +47,50 @@ set final_element_ico=%expected_element_ico:\=\\% set final_titleblock_ico=%expected_titleblock_ico:\=\\% rem genere le fichier .reg pour enregistrer les associations de fichiers +rem HKEY_CURRENT_USER : ne demande pas les droits administrateur set reg_file=qet_install_file_associations.reg ( echo Windows Registry Editor Version 5.00 echo. rem Declaration de l'application - echo [HKEY_CLASSES_ROOT\Applications\qelectrotech.exe\shell\open\command] + echo [HKEY_CURRENT_USER\Software\Classes\Applications\qelectrotech.exe\shell\open\command] echo @="\"%final_qet_exe%\" \"%%1\"" rem association de fichier *.qet - echo [HKEY_CLASSES_ROOT\.qet] + echo [HKEY_CURRENT_USER\Software\Classes\.qet] echo @="qet_diagram_file" - echo [HKEY_CLASSES_ROOT\qet_diagram_file] + echo [HKEY_CURRENT_USER\Software\Classes\qet_diagram_file] echo @="QET diagram" echo "EditFlags"=dword:00000000 echo "BrowserFlags"=dword:00000008 - echo [HKEY_CLASSES_ROOT\qet_diagram_file\DefaultIcon] + echo [HKEY_CURRENT_USER\Software\Classes\qet_diagram_file\DefaultIcon] echo @="%final_project_ico%,0" - echo [HKEY_CLASSES_ROOT\qet_diagram_file\shell\open\command] + echo [HKEY_CURRENT_USER\Software\Classes\qet_diagram_file\shell\open\command] echo @="\"%final_qet_exe%\" \"%%1\"" rem association de fichier *.elmt - echo [HKEY_CLASSES_ROOT\.elmt] + echo [HKEY_CURRENT_USER\Software\Classes\.elmt] echo @="qet_element_file" - echo [HKEY_CLASSES_ROOT\qet_element_file] + echo [HKEY_CURRENT_USER\Software\Classes\qet_element_file] echo @="QET element" echo "EditFlags"=dword:00000000 echo "BrowserFlags"=dword:00000008 - echo [HKEY_CLASSES_ROOT\qet_element_file\DefaultIcon] + echo [HKEY_CURRENT_USER\Software\Classes\qet_element_file\DefaultIcon] echo @="%final_element_ico%,0" - echo [HKEY_CLASSES_ROOT\qet_element_file\shell\open\command] + echo [HKEY_CURRENT_USER\Software\Classes\qet_element_file\shell\open\command] echo @="\"%final_qet_exe%\" \"%%1\"" rem association de fichier *.titleblock - echo [HKEY_CLASSES_ROOT\.titleblock] + echo [HKEY_CURRENT_USER\Software\Classes\.titleblock] echo @="qet_titleblock_file" - echo [HKEY_CLASSES_ROOT\qet_titleblock_file] + echo [HKEY_CURRENT_USER\Software\Classes\qet_titleblock_file] echo @="QET title block template" echo "EditFlags"=dword:00000000 echo "BrowserFlags"=dword:00000008 - echo [HKEY_CLASSES_ROOT\qet_titleblock_file\DefaultIcon] + echo [HKEY_CURRENT_USER\Software\Classes\qet_titleblock_file\DefaultIcon] echo @="%final_titleblock_ico%,0" - echo [HKEY_CLASSES_ROOT\qet_titleblock_file\shell\open\command] + echo [HKEY_CURRENT_USER\Software\Classes\qet_titleblock_file\shell\open\command] echo @="\"%final_qet_exe%\" \"%%1\"" ) > %reg_file%