Quand le toasteur de Windows a des ratés

On m'a signalé cette semaine une anomalie que je n'avais jamais vue jusqu'à présent lorsqu'on utilise les notifications dans un projet Windows (VCL ou FireMonkey, peu importe). Lors du premier lancement d'une notification on a de fortes chances de se retrouver avec un titre "Embarcadero.DesktopToasts." suivi d'une série de lettres et chiffres.

Comme ça ne se produit qu'une fois par programme et par session utilisateur, avec un plus un cache dans l'OS, c'est assez compliqué à reproduire et déboguer. Suite à des discussions sur plusieurs forums le problème a fait l'objet du signalement RSP-32375 (et d'autres) pris en charge par Embarcadero.

Après investigations il semble que le problème vienne d'un délai entre la création des fichiers et leur visibilité par certaines API de Windows.

Le TNotificationCenter fourni par Embarcadero avec Delphi et C++Builder crée une clé de registre pour se référencer avec un nom unique auprès de Windows. Ce nom est la fameuse chaine "Embarcadero.DesktopToasts.GnaGnaGna". Le "GnaGnaGna" étant un hash calculé à partir du chemin d'accès et du nom de l'exécutable afin d'éviter les doublons. En soit ça n'est pas la source du problème.

L'étape suivante est de créer un raccourci dans le menu démarrer de l'utilisateur vers l'exécutable auquel sera attaché la notification par Windows. C'est là que ça coince.

Si l'opération est faite lors d'une notification, l'API de notification ne voit pas le lien symbolique et utilise l'ID unique de l'application (utilisé comme lien avec la clé de registre) au lieu du nom du fichier servant de lien symbolique (le nom du programme exécutable).

Si ce truc vous ennuie (sachant qu'il ne se déclenche qu'une fois dans la vie de l'application) vous avez deux solutions :

- soit appeler la méthode PlatformInitialize sur votre instance du notification center comme je l'ai indiqué en réponse au ticket d'incident (en espérant ne pas envoyer votre première notification tout de suite mais quelques millisecondes ou secondes plus tard)

- soit créer un raccourci vers l'exécutable dans le dossier C:\Users\USERPSEUDO\AppData\Roaming\Microsoft\Windows\Start Menu\Programs lors de votre processus d'installation

Avec ça, plus de raisons de se plaindre (à part auprès de Microsoft pour leurs bizarreries), vous pouvez utiliser les notifications sous Windows sans problème.


Mug Chinese New Year 2023 : year of the rabbitMug Pascal case in Alexandrie