2012-04-03 4 views
5

Also arbeite ich an einem einfachen .NET-Programm für die Arbeit und hit ein wenig von einem seltsamen Roadblock, den ich kann ' t herausfinden. Die Anwendung verwendet eine Konfigurationsdatei, die Anwendungen zu einem Dropdown-Menü hinzufügt. Bevor es jedoch zum Menü hinzugefügt wird, gibt es system.io.file.exists, um sicherzustellen, dass die Datei mindestens zum Zeitpunkt der Erstellung des Menüs vorhanden ist.System.IO.File.Exists (@ "C: Windows System32 SnippingTool.exe") gibt false zurück

Allerdings gibt System.IO.File.Exists (@ "C: \ Windows \ System32 \ SnippingTool.exe") false zurück, aber die ausführbare Datei ist da. Ebenso gibt stikynot.exe auch false zurück. Andere Dateien im Verzeichnis system32 geben true zurück (wie Notepad). Ich kann diese Anwendungen filestat, aber mein .net Programm kann sie gerade nicht lesen und system.io.file.exists gibt false zurück. Ich habe verschiedene Berechtigungen ohne Glück überprüft. Es scheint für einige Anwendungen isoliert zu sein, aber ich bin mir nicht sicher warum.

+0

Das Konto ist, dass das Programm unter Berechtigungen für das Verzeichnis zu navigieren haben läuft? Wenn nicht, werden Sie bei diesem Aufruf falsch angezeigt. – Oded

+0

Ja, und andere Anwendungen in diesem Verzeichnis können problemlos gefunden werden. – Morcalavin

+0

mögliches Duplikat von [C# Überprüfen Sie, ob eine ausführbare Datei im Windows-Pfad existiert] (http://stackoverflow.com/questions/3855956/c-sharp-check-if-an-executable-exists-in-the-windows-path) – Arion

Antwort

9

Das ist eine Funktion von 64-Bit-Windows.

In x64 haben Sie zwei Ordner mit Systemdateien: system32 und SysWOW64.

Wenn Sie etwas in system32 setzen, wird es von allen 64-Bit- Anwendungen zu sehen. SysWOW64 ist aus Kompatibilitätsgründen da - alles dort wird von 32 Bit (sic!) Apps sichtbar sein.

So weit wie .NET betroffen ist, existiert die Datei nicht. Es funktioniert für Notepad, da notepad.exe in diesen beiden Verzeichnissen vorhanden ist.

Sie können dieses Verhalten testen. Erstellen Sie eine Textdatei in einem der Verzeichnisse, aber nicht in dem anderen und prüfen Sie, ob es existiert. Dann ändern Sie Ihre Projektkonfiguration (Rechtsklick auf Lösung -> Configuration Manager) zwischen x86 und x64 und genießen Sie das Ergebnis.

+0

Das ist es. Danke. – Morcalavin

2

Ich habe einen verrückten Bug zu diesem Thema beziehen. Danke ya23.

In meinem Fall nur Projekteigenschaften ändern> Build> uncheck Bevorzugen 32-Bit-