diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index c8d957b..6de4650 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,26 +1,17 @@ ## Correction -**L'installation échouait sur un ordinateur vierge.** Au tout premier lancement du fichier téléchargé, sur une machine où AJEAN n'avait jamais été installé, la fenêtre d'installation s'affichait, puis répondait : +**Refuser l'installation une fois la rendait impossible pour toujours.** Au premier lancement, AJEAN demande s'il doit s'installer sur l'ordinateur. Répondre Non était retenu définitivement : la question ne revenait plus jamais, même en fermant l'application et en relançant le fichier téléchargé. Il ne restait aucun moyen d'installer AJEAN depuis l'application. -``` -Installation impossible : -open C:\ProgramData\jean\bin\jean.exe: The system cannot find the path specified -``` +Ce refus avait été mémorisé pour éviter de reposer la question à chaque lancement. Le remède était pire que le mal. Un Non veut dire « pas maintenant », jamais « plus jamais » : la question revient désormais au prochain lancement du fichier, comme le fait n'importe quel installeur, et la fenêtre le dit explicitement. -AJEAN démarrait alors depuis le fichier téléchargé, sans s'être installé : aucun raccourci, aucun programme dans le menu Démarrer, et le fichier téléchargé restait le seul moyen de le lancer. - -La cause : le premier lancement créait bien le dossier de réglages, mais pas le sous-dossier destiné à recevoir le programme. Il n'était créé que par l'installation en ligne de commande. Le dossier est désormais créé au moment d'écrire le programme, quel que soit le chemin emprunté. - -Ce cas échappait aux essais des versions précédentes, qui partaient toujours d'une installation déjà en place. Le parcours complet sur une machine vierge est maintenant vérifié, fenêtre après fenêtre, jusqu'au démarrage de l'application et à la présence des raccourcis. +Si vous étiez bloqué dans cet état, il n'y a rien à réparer : téléchargez `jean-windows-amd64.exe` depuis cette page et lancez-le, l'installation vous sera de nouveau proposée. ## Mise à jour -Si vous êtes dans ce cas, rien n'est à réparer : téléchargez `jean-windows-amd64.exe` depuis cette page et lancez-le, l'installation se fera cette fois. - -Pour une installation déjà en place : - ``` jean update ``` +Sous Windows, télécharger le fichier depuis la page des releases et le lancer fait le même travail. + L'icône de la barre de menus macOS, introduite en 0.6.10, n'a toujours pas été vérifiée sur une vraie machine. diff --git a/cmd/jean/resource_windows_amd64.syso b/cmd/jean/resource_windows_amd64.syso index 8aee975..b391700 100644 Binary files a/cmd/jean/resource_windows_amd64.syso and b/cmd/jean/resource_windows_amd64.syso differ diff --git a/cmd/jean/resource_windows_arm64.syso b/cmd/jean/resource_windows_arm64.syso index 66bd09d..a5f6ab8 100644 Binary files a/cmd/jean/resource_windows_arm64.syso and b/cmd/jean/resource_windows_arm64.syso differ diff --git a/cmd/jean/versioninfo.json b/cmd/jean/versioninfo.json index 2dd6790..507563d 100644 --- a/cmd/jean/versioninfo.json +++ b/cmd/jean/versioninfo.json @@ -3,13 +3,13 @@ "FileVersion": { "Major": 0, "Minor": 6, - "Patch": 14, + "Patch": 15, "Build": 0 }, "ProductVersion": { "Major": 0, "Minor": 6, - "Patch": 14, + "Patch": 15, "Build": 0 }, "FileFlagsMask": "3f", @@ -25,7 +25,7 @@ "LegalCopyright": "Copyright (c) 2026 AJEAN contributors. MIT License.", "OriginalFilename": "jean.exe", "ProductName": "AJEAN", - "ProductVersion": "0.6.14", + "ProductVersion": "0.6.15", "Comments": "https://github.com/nathaninline/jean — projet open source (MIT)" }, "VarFileInfo": { diff --git a/internal/jean/run.go b/internal/jean/run.go index e9d7d41..a00ec6b 100644 --- a/internal/jean/run.go +++ b/internal/jean/run.go @@ -10,7 +10,7 @@ import ( "strings" ) -const Version = "0.6.14" +const Version = "0.6.15" // Main est le vrai main() du binaire (cmd/jean ne fait que l'appeler). func Main() { diff --git a/internal/jean/sys_firstrun_windows.go b/internal/jean/sys_firstrun_windows.go index b3fae99..6d42128 100644 --- a/internal/jean/sys_firstrun_windows.go +++ b/internal/jean/sys_firstrun_windows.go @@ -29,10 +29,11 @@ import ( // // Maintenant, deux cas seulement : // -// 1. AJEAN n'est pas installé. On DEMANDE, une bonne fois : c'est le seul moment -// où l'utilisateur gagne à savoir ce qu'on pose sur sa machine et où. Puis -// copie + PATH + raccourcis, et on démarre depuis la copie installée. Un refus -// est mémorisé, on ne repose pas la question. +// 1. AJEAN n'est pas installé. On DEMANDE : c'est le seul moment où +// l'utilisateur gagne à savoir ce qu'on pose sur sa machine et où. Puis +// copie + PATH + raccourcis, et on démarre depuis la copie installée. Un +// refus vaut « pas maintenant » et la question revient au prochain lancement +// du fichier : mémorisé, il ne laissait AUCUN moyen d'installer AJEAN. // // 2. AJEAN est déjà installé. Le fichier téléchargé se comporte en installeur de // mise à jour, avec trois situations bien distinctes (voir runAsInstaller) : @@ -102,20 +103,21 @@ func appFirstRun() bool { // Première installation : là, une question. C'est le seul moment où // l'utilisateur a intérêt à savoir ce qui va être posé sur sa machine, et // c'est l'absence de cette question qui rendait le double-clic illisible. - if declinedInstall() { - return false - } + // + // Un refus n'est PAS mémorisé. Il l'a été en 0.6.11 pour éviter de reposer la + // question à chaque lancement, mais il devenait alors définitif : plus aucun + // moyen d'installer AJEAN, même en relançant le fichier téléchargé. Un « non » + // veut dire « pas maintenant », jamais « plus jamais » : c'est le comportement + // de n'importe quel installeur, qui repropose tant qu'on le relance. if messageBox( "Installer AJEAN sur cet ordinateur ?\n\n"+ "• le programme sera copié dans :\n "+target+"\n"+ "• un raccourci sera ajouté au menu Démarrer et au Bureau\n"+ "• vos réglages et modèles seront rangés dans :\n "+JeanHome()+"\n\n"+ "Vous pourrez ensuite supprimer le fichier que vous venez de télécharger.\n\n"+ - "Répondre Non lance AJEAN sans rien installer.", + "Répondre Non démarre AJEAN sans rien installer. La question reviendra\n"+ + "au prochain lancement de ce fichier.", "Installation d'AJEAN", mbYesNo|mbIconQuestion) != idYes { - // Refus mémorisé : reposer la question à chaque double-clic serait - // ignorer la réponse déjà donnée. - _ = os.WriteFile(declineFlag(), []byte("non\n"), 0o644) return false } @@ -133,13 +135,6 @@ func appFirstRun() bool { return launch(target) } -func declineFlag() string { return filepath.Join(JeanHome(), ".install_declined") } - -func declinedInstall() bool { - _, err := os.Stat(declineFlag()) - return err == nil -} - // launch démarre la copie installée et demande à l'appelant de rendre la main. // Renvoie false si le lancement échoue, auquel cas l'exécutable courant prend le // relais : mieux vaut démarrer depuis le mauvais dossier que pas du tout.