Einer meiner Kunden bekam eine Ausnahme, wenn er versuchte, mein Produkt zu verwenden. Ich habe den Callstack der aufgetretenen Ausnahme erhalten, deren oberste lautet:
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)
Beim Googeln habe ich viele Blog-Beiträge gefunden, die besagen, dass diese Ausnahme ausgelöst wird, wenn sich mehr als 65535 temporäre Dateien im Ordner% TEMP% befinden und die Lösung darin besteht, die alten temporären Dateien einfach zu löschen. Ich kann den Kunden bitten, dies zu tun, aber dies ist möglicherweise nur eine vorübergehende Lösung. Was ist, wenn er regelmäßig eine andere Software ausführt, die häufig GetTempFileName aufruft, wodurch das Problem immer wieder auftritt?
Ich kann den Ordner% TEMP% nicht einfach programmgesteuert löschen, da dies etwas anderes beschädigen könnte, und ich kann es nicht vermeiden, GetTempFileName aufzurufen (und stattdessen meinen eigenen temporären Ordner zu verwenden), da nicht ich, sondern WPF-Code ihn aufruft.
Gibt es dafür eine dauerhafte Lösung?
UPDATE : Ich habe bestätigt, dass das Problem, bei dem der Ordner% TEMP% mit Protokolldateien überfüllt ist, nicht durch meinen eigenen Code verursacht wird und von einer anderen Drittanbieteranwendung auf dem Computer des Kunden verursacht werden muss. Ich habe mich auch mit der Implementierung von befasst Cursor.LoadFromStreamund es ist sicherlich kein Fehler - es generiert eine temporäre Datei, löscht sie dann aber im finallyBlock.