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 the path。这让我发疯,因为我们无法在我们的测试系统上重现该问题。不管是什么配置。XP、Vista、Win7 - 在我们的机器上它可以正常工作。

4

1 回答 1

1

最后我们找到了一个有同样问题并且愿意帮助测试的用户。此错误的根本原因似乎是 NSIS 安装程序创建了一个错误字符的文件夹。没有人注意到这一点,因为该字符看起来与应该创建的字符几乎相同。所以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 回答