Seltsame, mögliche "Schattenkopie" - Ausgabe, bei der zwei Editoren unterschiedliche Inhalte anzeigen

745
Neil Barnwell

Ich habe etwas Code, der eine Konfigurationsdatei liest, aber wenn ich die Datei in TextPad öffne, sehe ich andere Werte als meine Anwendung. Ich habe es mit Notepad überprüft. Notepad stimmt mit meiner Bewerbung überein, TextPad zeigt noch etwas anderes.

Dies ist auf Vista x64 Business.

Irgendeine Idee, was das verursachen könnte? Ich habe in den Context Menu->Properties->Previous VersionsDetails nachgesehen, aber es heißt "Es sind keine Vorversionen verfügbar".

Ich wurde nach einem Beispiel gefragt, hier sind die Schritte zum Replizieren (ich kann es nicht zuverlässig machen):

  1. Installierte .NET-App in Programmdateien.
  2. Diese App liest die Konfigurationsdatei, fällt jedoch um.
  3. Ich bearbeite diese Konfigurationsdatei manuell in Textpad.
  4. Die Änderung wird nicht wirksam.
  5. Ich öffne die Konfigurationsdatei in Notepad und sehe etwas anderes.
  6. Versuchen Sie, die Änderung in Notepad vorzunehmen und zu speichern, und Sie erhalten folgende Fehlermeldung:

Notizblock

Die Datei C: \ Programme (x86) \ Daniel Schaffer \ WorkingOn für FogBugz \ FogBugz> WorkingOn.exe.config kann nicht erstellt werden.

Stellen Sie sicher, dass der Pfad und der Dateiname korrekt sind.

Ich kann den Inhalt hier nicht einfügen, da er XML ist und von Superuser.com codiert wird. Hier ist ein Link zu einem Screencast: http://screencast.com/t/zhERl7mocp4 .

2
Kannst du ein Beispiel posten? Ohne weitere Details wird es schwierig sein, das Problem zu diagnostizieren ChrisF vor 14 Jahren 0
Auch über Stackoverflow gefragt - http://stackoverflow.com/questions/1476870/strange-possible-shadow-copy-issue-where-two-editors-show-different-contents ChrisF vor 14 Jahren 0
Wenn Sie das XML als Code kennzeichnen, sollte es so wie es ist gepostet werden. ChrisF vor 14 Jahren 0

2 Antworten auf die Frage

6
Ryan Bolger

Wahrscheinlich stoßen Sie auf einen Teil der Vista-UAC-Funktionen namens Virtual Store . Hier ist ein Ausschnitt aus dem Artikel:

Wenn eine Anwendung an einen Systemspeicherort schreibt, der nur von Administratoren beschrieben werden kann, schreibt Windows alle nachfolgenden Dateioperationen in einen benutzerspezifischen Pfad im Verzeichnis des virtuellen Speichers, das sich unter% LOCALAPPDATA% \ VirtualStore befindet. Wenn die Anwendung diese Datei später zurückliest, stellt der Computer die Datei im virtuellen Speicher bereit. Da die Windows-Sicherheitsinfrastruktur die Virtualisierung ohne die Hilfe der Anwendung verarbeitet, glaubt die Anwendung, dass sie erfolgreich in Programme lesen und schreiben konnte. Durch die Transparenz der Dateivirtualisierung können Anwendungen erkennen, dass sie von der geschützten Ressource schreiben und lesen, während sie tatsächlich auf die virtualisierte Version zugreifen.

Ihre Anwendung wird in einem nicht erhöhten Kontext (nicht Admin) ausgeführt. Wenn versucht wird, die Datei im Ordner "Programme" zu öffnen, wird diese Anforderung transparent an den virtuellen Speicherort der Benutzerkonten weitergeleitet. Ihre Kopie von TextPad ist wahrscheinlich in einem erhöhten Kontext laufen und so ist es zu sehen, die Datei, die in den Leben realen Ordnern Programm.

Wenn dies Ihr Code ist, dessen Funktionalität Sie ändern können, und Sie möchten, dass Benutzer ihn als Administrator verwenden können, sollten Sie den Speicherort Ihrer Konfigurationsdateien an einen Ort im ApplicationData-Ordner des Benutzers ändern, an den er gehört. Es wird heutzutage dringend davon abgeraten, Einstellungen in eine Konfigurationsdatei zu schreiben, die im Installationsordner der Anwendung gespeichert ist. Wenn Sie wirklich Einstellungen haben, die für alle Benutzer des Computers gelten sollen, sollten Sie diese stattdessen in den Ordner All Users Application Data schreiben. Und selbst dann müssen Sie die App immer noch standardmäßig in einem erhöhten Kontext ausführen, sofern Sie der Gruppe Benutzer nicht explizit Schreibzugriff auf Ihren Ordner gewähren.

Halten Sie dieses Mantra aufrecht, während Sie Software für Vista und darüber hinaus schreiben. "Benutzer können nur in ihr Profil schreiben ... Benutzer können nur in ihr Profil schreiben"

0
Aaron Digulla

The reason why Notepad can't create the file is that another process is locking it. Since the content of the file changes, my guess would be that the app is writing the file while you look at it.

Aber wie erklärt sich das, dass das Textpad beim Öffnen der Datei und der Notizblock beim Öffnen derselben Datei unterschiedlichen Text erhalten? Neil Barnwell vor 14 Jahren 0
Textpad liest die Datei, App ändert die Datei, Notepad liest die neue Datei Aaron Digulla vor 14 Jahren 1
Wenn Ihre App nicht ausgeführt wird, ist dieses Verhalten äußerst seltsam. Installieren Sie "ProcessExplorer" und verwenden Sie "Find handle" mit dem Dateinamen, wenn Notepad die Datei nicht speichern möchte, um den Prozess zu finden, der sie blockiert. Aaron Digulla vor 14 Jahren 0