私の顧客の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ブロック内で削除します。