Entwickler-Ecke
Dateizugriff - Dateizugriff unter Windows 8
Mathematiker - Fr 21.06.13 00:10
Titel: Dateizugriff unter Windows 8
Hallo,
nachdem ich nun stundenlang mit Windows 8 kämpfe und irgendwie dem noch nichts Positives abgewinnen kann, stehe ich vor einem (für mich) kleinen Wunder.
Ich habe ein Programm in einem Ordner unter Programme(X86) abgelegt, dass eine INI im Programmordner(!) bei Programmstart liest und am Ende schreibt.
Es gibt keinerlei Fehlermeldung, alles scheint zu funktionieren. Es wird keinerlei Meldung gebracht, dass ich nicht in den Ordner schreiben darf.
Nach einem Neustart sind die geschriebenen Änderungen vorhanden. Was will ich mehr.
Aber! Die Datei hat sich nicht verändert. Zumindest wird die gleiche Größe und das gleiche Datum angezeigt und der Inhalt, den man mit einem Texteditor sieht, ist auch nicht verändert.
Wo bitte kommen dann die Änderungen her, die tatsächlich vorhanden sind.
Endgültig irre wird es, wenn ich die INI mit einer anderen gleichnamigen, geänderten INI aus einem anderen Ordner überschreibe. Dann werden diese Änderungen ignoriert.
Ich verstehe nichts mehr.
Beste Grüße
Mathematiker
jaenicke - Fr 21.06.13 06:02
Das ist seit Vista so wie du es gerade erfährst. In das Programmverzeichnis darf nun einmal kein Programm schreiben, und das ist seit Windows 2000 so.
Für alte oder unsauber geschriebene Programme, die das dennoch tun, leitet Windows Vista und höher Zugriffe in den VirtualStore um, damit diese weiter funktionieren. Das passiert nur, wenn die Anwendung kein Manifest drin hat um anzuzeigen, dass sie kompatibel mit XP oder höher ist. Du findest diese umgeleiteten Dateien unter:
Quelltext
1:
| C:\Users\Sebastian\AppData\Local\VirtualStore |
Mathematiker - Sa 22.06.13 08:50
Hallo,
jaenicke hat folgendes geschrieben : |
In das Programmverzeichnis darf nun einmal kein Programm schreiben, und das ist seit Windows 2000 so. |
Ist mir schon klar.
Aus diesem Grund habe ich jetzt auf folgendes Vorgehen geändert.
Beim ersten Programmstart teste ich, ob es unter AppData\Roaming\ mein "eigenes" Verzeichnis Programmname gibt; wenn nicht, wird es angelegt. Zum Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| function GetWinSpecialFolder(CSIDLFolder: integer): AnsiString; begin SetLength(Result, MAX_PATH); SHGetSpecialFolderPath(0, PChar(Result), CSIDLFolder, false); SetLength(Result, StrLen(PChar(Result))); if (Result <> '') then Result := IncludeTrailingBackslash(Result); end; function datenverzeichnis:string; begin result := IncludeTrailingBackslash(GetWinSpecialFolder(CSIDL_APPDATA)+programmname); end; ... if not directoryexists(datenverzeichnis) then createdir(datenverzeichnis); ... |
Da ich wieder einmal nicht richtig weiß, was ich tue, stellen sich für mich die Fragen:
Funktioniert das unter allen Windows-Varianten und auch als Nicht-Administrator?
Kann das Programm dann auch für einen Nutzer ohne Administratorrechte aus dem Ordner lesen und vor allem schreiben?
Kann es sein, dass irgendein Windows-interner Prozess, z.B. die Datenträgerbereinigung, meinen neuen Ordner und dessen Inhalt löscht?
Ich weiß, viele Fragen. Aber irgendwie stehe ich im Moment "neben mir". Mit Windows 8 sind alle meine Illusionen, dass es einfacher werden könnte, geplatzt.
Danke für Eure Hilfe.
Beste Grüße
Mathematiker
Mathematiker - Sa 22.06.13 12:44
Hallo,
Danke, das hilft mir sehr weiter.
Starte ich jetzt mein Programm bleibt der VirtualStore leer. So sollte es ja auch sein.
Lustig finde ich, dass ich nicht der Einzige bin, der nicht korrekt arbeitet. Im VirtualStore haben sich mehrere Programme breit gemacht, sogar ein älteres von Microsoft. :wink:
Nur noch eine kleine Frage zum prinzipiellen Verständnis:
GetSpecialFolder(CSIDL_APPDATA)) usw. funktionieren also auch problemlos auf den Windows-Versionen 2000 und XP?
Der Unterschied zu Vista, 7 und 8 ist nur, dass der Anwendungsdatenordner an anderer Stelle liegt.
Beste Grüße
Mathematiker
jaenicke - Sa 22.06.13 13:29
Mathematiker hat folgendes geschrieben : |
Nur noch eine kleine Frage zum prinzipiellen Verständnis:
GetSpecialFolder(CSIDL_APPDATA)) usw. funktionieren also auch problemlos auf den Windows-Versionen 2000 und XP?
Der Unterschied zu Vista, 7 und 8 ist nur, dass der Anwendungsdatenordner an anderer Stelle liegt. |
Richtig.
OlafSt - Sa 22.06.13 22:21
Funktioniert tadellos bis runter zu XP, Win2K hab ich keine Kunden mehr im Stamm. Einen Hahnenfuß gibt es aber doch noch: Mancher "Administrator" ist noch nicht ganz up to date und hat gesperrt/sperrt dann für alle Benutzer das Laufwerk C: komplett weg. Diesen Admins mußt du dann schonend beibringen, das ihr Wissen mehrere Jahre veraltet ist und zumindest der Zugriff auf C:\Users\bla erlaubt sein muß ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!