Uno dei miei clienti ha ottenuto un'eccezione ogni volta che ha provato a utilizzare il mio prodotto. Ho ottenuto il callstack dell'eccezione che si era verificata, il cui inizio è:
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)
Cercando su Google, ho trovato molti post sul blog che affermano che questa eccezione viene generata quando ci sono più di 65535 file temporanei nella cartella% TEMP% e che la soluzione è semplicemente cancellare i vecchi file temporanei. Posso chiedere al cliente di farlo, ma questa potrebbe essere solo una soluzione temporanea: cosa succede se eseguono regolarmente qualche altro software che effettua chiamate frequenti a GetTempFileName, il che farà sì che il problema si ripresenti più e più volte?
Non posso semplicemente cancellare a livello di programmazione la cartella% TEMP%, poiché ciò potrebbe in qualche modo danneggiare qualcos'altro, e non posso evitare di chiamare GetTempFileName (e utilizzare invece la mia cartella temporanea) poiché non sono io ma il codice WPF che lo chiama.
Esiste una soluzione permanente per questo?
AGGIORNAMENTO : Ho confermato che il problema in cui la cartella% TEMP% trabocca di file di registro non è causato dal mio codice e deve essere causato da qualche altra applicazione di terze parti sul computer del cliente. Ho anche esaminato l'implementazione di Cursor.LoadFromStreame sicuramente non è colpa: genera un file temporaneo, ma poi lo elimina in finallyblocco.