Ich habe einen merkwürdigen Fehler, wo mein Code eine Datei nicht gefunden Ausnahme zurückgibt, aber die Datei scheint genau dort zu sein, wo es sein sollte. Mein Projekt enthält einen Code, der ein System-Cmdlet ausführt und die Ergebnisse des Cmdlets in einer XML-Ausgabedatei sucht. Wir weisen das Cmdlet an, diese XML-Ausgabedatei in einem benutzerdefinierten Unterverzeichnis des TEMP-Verzeichnisses des Systems abzulegen, z. B., C:\WINDOWS\TEMP\SomeFolder\output.xml. Anschließend wird die Klasse .NET XmlDocument zum Öffnen und Parsen der XML-Datei verwendet.
Unter WinXP funktioniert dies. Auf meinem Entwicklungssystem funktioniert es. Auf einem sauberen Win7-Testrechner funktioniert es nicht.
Mein erster Gedanke war, dass ich in Vista/Win7-Datei-Virtualisierung läuft, aber unsere Anwendung Manifest gibt an, dass unsere app als Admin ausgeführt wird - und von dem, was ich gelesen habe, dass sollte Datei-Virtualisierung zu umgehen.
Eine weitere Schwierigkeit besteht darin, dass unser Code gerne UNC-Dateipfade verwendet, auch wenn die Datei lokal auf dem Rechner liegt. (Es besteht die Anforderung, dass der betreffende Code das Cmdlet auf einem entfernten Rechner ausführen muss, und daher könnte sich die XML-Ausgabe auch auf einem entfernten Rechner befinden.) Wir versuchen also, die XML-Datei über \MATT -WIN7 \C $ \WINDOWS\TEMP\SomeFolder.xml statt C:\WINDOWS\TEMP\SomeFolder\output.xml.
Ich habe jedoch den UNC-Pfadcode vorübergehend entfernt, und ein einfacher Aufruf von File.Exists() meldet immer noch, dass die XML-Datei nicht vorhanden ist, obwohl der Windows Explorer die Datei genau dort anzeigt, wo sie meiner Meinung nach sein sollte.
Gibt es eine Nuance der Dateivirtualisierung, über die ich noch nicht gelesen habe?
Meine Abhilfe ist die Ausgabe xml-Datei irgendwo anders zu verschieben, aber das wird potenziell brechen die "Portabilität" unseres Codes, wenn es auf einem Remote-Computer ausgeführt werden muss, weil die Verwendung der %TEMP% Speicherort ist ein Speicherort, der für Remote-Computer ziemlich leicht aufgelöst werden kann (über Remote-Registrierung aufrufen, um die Systemumgebungsvariable zu finden).
Ich würde es vorziehen, die Datei dort zu belassen, wo sie ist, und unseren Code so zu ändern, dass er die Datei tatsächlich findet!