2012-04-11 5 views
0

Gelegentlich melden einige Benutzer unserer Software Probleme, die durch verkabelte DirectoryNotFoundException Exceptions verursacht werden. Dies geschieht nur bei einigen Benutzern mit Vista. Nicht alle Benutzer, die Vista ausführen, haben dieses Problem. Es gab keine Berichte von Benutzern mit Win7 oder XP (dies beweist jedoch nicht, dass dieses Problem auf diesen Systemen nicht auftritt - wir haben solche Berichte nicht).DirectoryNotFoundException beim Zugriff auf ProgramData unter Vista - Einen Teil des Pfades konnte nicht gefunden werden - WinIOError

Unsere Software speichert einige Grafikdaten im ProgramData-Ordner. Wenn das Programm versucht, diese Dateien die folgende Ausnahme zu lesen geworfen:

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) 

Der Weg ist C: \ Programdata \ My App Name \ Unterordner \ Subfolder. Ordner existiert - ich bin 100% sicher. Es wurde von NSIS Installer erstellt. Es ist für alle Benutzer schreibbar (oder zumindest sollte es so sein, wie wir es mit NSIS-Skript einstellen). Der Benutzer bestätigt, dass der Ordner existiert - er kann mit Windows Explorer zu diesem Ort navigieren.

Zuerst dachte ich, es war das UAC-Problem, aber die Ausnahme sagt Konnte einen Teil des Pfades nicht finden. Das macht mich verrückt, da wir das Problem auf unseren Testsystemen nicht reproduzieren können. Egal, die Konfiguration. XP, Vista, Win7 - auf unseren Rechnern funktioniert es einfach.

+0

Haben Sie versucht, eine einfache Anweisung if (! File.Exists (path)) direkt vor dieser Codezeile auszuführen, nur für den Fall, dass .NET die Datei nicht lesen kann? – Josh

+0

"Der Pfad ist C: \ ProgramData \ Mein App-Name \ Unterordner \ Unterordner. Ordner existiert - ich bin 100% sicher. Er wurde von NSIS Installer erstellt." Sind Sie 100% sicher, weil Sie sich auf das NSIS-Installationsprogramm verlassen, oder weil Sie auf dem betreffenden Computer starten können -> run -> "C: \ ProgramData \ Mein App-Name \ Subfolder \ Subfolder" und tatsächlich die Ordnerinhalte auf diese Weise? –

+0

@AJ. - Der Benutzer hat bestätigt, dass er mit Windows Explorer zu diesem Pfad navigieren kann. Ich habe den Screenshot gesehen. – SiliconMind

Antwort

1

Endlich fanden wir einen Benutzer, der das gleiche Problem hatte und bereit war, beim Testen zu helfen. Die Hauptursache für diesen Fehler scheint das NSIS-Installationsprogramm zu sein, das einen Ordner mit einem falschen Zeichen erstellt. Niemand bemerkte das, weil dieser Char fast identisch mit dem aussieht, der erschaffen werden sollte. So war DirectoryNotFoundException in der Tat richtig.

Die NSIS sollte auf einige nur einen Ordner mit ń char

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

sondern erstellt einen Ordner mit ñ char

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

Der verdrahteten Teil schaffen, ist das passiert Maschinen und wir konnten das nicht reproduzieren.

Lektion für heute: Vertrauen Sie Ihren Benutzern nie vollständig, wenn es um das Debuggen geht. Selbst der vom Benutzer bereitgestellte Screenshot war irreführend, da nur der Inhalt des betreffenden Ordners angezeigt wurde.

+0

Mögliche Lösung: http://stackoverflow.com/questions/10189227/nsis-installer-creates-directory-using-wrong-character-set – SiliconMind