我们软件的某些用户偶尔会报告由有线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 。文件夹存在 - 我百分百肯定。它由NSIS安装程序创建。它可以写给所有用户(或者至少应该是我们用NSIS脚本设置它的方式)。用户确认文件夹存在 - 他可以使用Windows资源管理器导航到该位置。
起初我认为这是UAC问题,但例外情况说无法找到路径的一部分。这让我很生气,因为我们无法在我们的测试系统上重现这个问题。无论配置如何。 XP,Vista,Win7 - 在我们的机器上运行它。
答案 0 :(得分:1)
最后,我们发现用户遇到了同样的问题并且愿意帮助进行测试。这个错误的根本原因似乎是NSIS安装程序,它创建了一个错误字符的文件夹。没有人注意到,因为该char看起来几乎与应该创建的char相同。所以DirectoryNotFoundException
确实是对的。
NSIS应该用ń char
创建一个文件夹// U+0144 ń c5 84 LATIN SMALL LETTER N WITH ACUTE
,而是使用ñ char
创建了一个文件夹// U+00F1 ñ c3 b1 LATIN SMALL LETTER N WITH TILDE
有线部分仅在某些机器上发生,我们无法重现。
今天的课程:在调试时永远不要完全信任您的用户。甚至用户提供的屏幕截图都是误导性的,因为它只显示相关文件夹的内容。