私の顧客の 1 人が、私の製品を使おうとすると例外が発生しました。発生した例外のコールスタックを取得しました。そのトップは次のとおりです。
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)
これをグーグルで検索すると、%TEMP% フォルダーに 65535 個を超える一時ファイルがある場合にこの例外がスローされ、解決策は古い一時ファイルを単純に消去することであると述べているブログ投稿がたくさん見つかりました。お客様にそうしていただくようお願いすることはできますが、これは一時的な解決策にすぎない可能性があります。お客様が GetTempFileName を頻繁に呼び出す他のソフトウェアを定期的に実行している場合、問題が何度も再発する可能性があります。
%TEMP% フォルダーをプログラムでクリアすることはできません。これは、何らかの形で他の何かに損害を与える可能性があるためです。また、GetTempFileName を呼び出す (代わりに自分の一時フォルダーを使用する) ことは避けられません。これは、私ではなく WPF コードが呼び出しているためです。
これに対する恒久的な解決策はありますか?
更新: %TEMP% フォルダーがログ ファイルでオーバーフローする問題は、自分のコードが原因ではなく、顧客のマシン上の他のサード パーティ製アプリケーションが原因であることが確認されました。の実装も調べましたが、Cursor.LoadFromStream
間違いではありません。一時ファイルを生成しますが、finally
ブロックで削除します。