Un de mes clients a eu une exception à chaque fois qu'il a essayé d'utiliser mon produit. J'ai obtenu le callstack de l'exception qui s'était produite, dont le sommet est :
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.__Error.WinIOError()
at System.IO.Path.GetTempFileName()
at System.Windows.Input.Cursor.LoadFromStream(Stream cursorStream)
at System.Windows.Input.Cursor..ctor(Stream cursorStream)
En cherchant sur Google, j'ai trouvé beaucoup de articles de blog indiquant que cette exception est levée lorsqu'il y a plus de 65535 fichiers temporaires dans le dossier %TEMP%, et que la solution consiste simplement à effacer les anciens fichiers temporaires. Je peux demander au client de le faire, mais cela pourrait n'être qu'une solution temporaire. Que faire si le client utilise régulièrement un autre logiciel qui fait de fréquents appels à GetTempFileName, ce qui fera réapparaître le problème encore et encore ?
Je ne peux pas simplement effacer par programme le dossier %TEMP%, car cela pourrait endommager quelque chose d'autre, et je ne peux pas éviter d'appeler GetTempFileName (et utiliser mon propre dossier temporaire à la place) car ce n'est pas moi mais le code WPF qui l'appelle.
Existe-t-il une solution permanente à ce problème ?
UPDATE : J'ai confirmé que le problème où le dossier %TEMP% déborde de fichiers journaux n'est pas causé par mon propre code, et doit être causé par une autre application tierce sur la machine du client. J'ai également examiné l'implémentation de Cursor.LoadFromStream
et il n'est sûrement pas en cause - il génère un fichier temporaire, mais le supprime ensuite en finally
bloc.