WinServer上访问ProgramData时的DirectoryNotFoundException - 无法找到路径的一部分 - WinIOError

时间:2012-04-11 10:20:14

标签: c# .net-2.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 。文件夹存在 - 我百分百肯定。它由NSIS安装程序创建。它可以写给所有用户(或者至少应该是我们用NSIS脚本设置它的方式)。用户确认文件夹存在 - 他可以使用Windows资源管理器导航到该位置。

起初我认为这是UAC问题,但例外情况说无法找到路径的一部分。这让我很生气,因为我们无法在我们的测试系统上重现这个问题。无论配置如何。 XP,Vista,Win7 - 在我们的机器上运行它。

1 个答案:

答案 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

有线部分仅在某些机器上发生,我们无法重现。

今天的课程:在调试时永远不要完全信任您的用户。甚至用户提供的屏幕截图都是误导性的,因为它只显示相关文件夹的内容。