0

DirectoryNotFoundExceptionときどき、ソフトウェアの一部のユーザーから、有線例外が原因であると報告されることがあります。これは、Vista を実行している一部のユーザーにのみ発生します。Vista を実行しているすべてのユーザーがこの問題を抱えているわけではありません。Win7 または XP を実行しているユーザーから、この問題の報告はありません (ただし、これらのシステムでこの問題が発生しないことを証明するものではありません。そのような報告はありません)。

当社のソフトウェアは、ProgramData フォルダー内にいくつかのグラフィック データを保存します。プログラムがこれらのファイルを読み取ろうとすると、次の例外がスローされます。

Message: Could not find a part of the path 'C:\ProgramData\My App Name\Subfolder\Subfolder'.
mscorlib
   in System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   in System.IO.Directory.InternalGetFileDirectoryNames(String path, String userPathOriginal, String searchPattern, Boolean includeFiles, Boolean includeDirs, SearchOption searchOption)
   in System.IO.Directory.GetFiles(String path, String searchPattern, SearchOption searchOption)
   in System.IO.Directory.GetFiles(String path)

パスはC:\ProgramData\My App Name\Subfolder\Subfolderです。フォルダが存在します - 100% 確信しています。これは、NSIS インストーラーによって作成されました。これは、すべてのユーザーが書き込み可能です (または、少なくとも、NSIS スクリプトで設定した方法である必要があります)。ユーザーは、フォルダーが存在することを確認します。ユーザーは、Windows エクスプローラーを使用してその場所に移動できます。

最初は UAC の問題だと思っていましたが、例外としてCould not find a part of path と表示されます。テストシステムで問題を再現できないため、これは私を夢中にさせます. 構成は問いません。XP、Vista、Win7 - 当社のマシンでは問題なく動作します。

4

1 に答える 1

1

最後に、同じ問題を抱えていて、テストを手伝ってくれるユーザーを見つけました。このエラーの根本的な原因は、NSIS インストーラーが 1 つの間違った文字でフォルダーを作成しているようです。その文字は、作成されるはずだったものとほとんど同じに見えるため、誰もそれに気づきませんでした。DirectoryNotFoundException確かにそうでした。

NSIS はń charのフォルダを作成することになっていた

// U+0144   ń   c5 84   LATIN SMALL LETTER N WITH ACUTE

代わりにñ charのフォルダーを作成しました

// U+00F1   ñ   c3 b1   LATIN SMALL LETTER N WITH TILDE

有線部分は一部のマシンでのみ発生するもので、再現できませんでした。

今日の教訓: デバッグに関しては、ユーザーを完全に信頼してはいけません。ユーザーが提供したスクリーンショットでさえ、問題のフォルダの内容のみを表示していたため、誤解を招くものでした。

于 2012-04-16T09:42:55.687 に答える