Autor Beitrag
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Fr 21.06.13 00:10 
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

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden Quelltext
1:
C:\Users\Sebastian\AppData\Local\VirtualStore					

Für diesen Beitrag haben gedankt: Hochhaus, Mathematiker
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Sa 22.06.13 08:50 
Hallo,
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden 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

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 22.06.13 09:58 
Ich habe dafür mal ein Projekt veröffentlicht, das den Zugriff komplett kapselt:
www.delphi-forum.de/viewtopic.php?t=92348
Damit kann man sowohl portable als auch installierte Umgebungen unterstützen, die Unit sucht die Einstellungen automatisch.

Mehr zu den Hintergründen dazu habe ich hier geschrieben, das dürfte auch deine Frage beantworten:
www.entwickler-ecke....p=541637&view=dl
Das Verzeichnis ist für den aktuellen Benutzer und daher auch ohne Adminrechte beschreibbar.

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Sa 22.06.13 12:44 
Hallo,
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe dafür mal ein Projekt veröffentlicht, das den Zugriff komplett kapselt:
www.delphi-forum.de/viewtopic.php?t=92348

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

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 22.06.13 13:29 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
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.

Für diesen Beitrag haben gedankt: Mathematiker
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: 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ß ;)

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.

Für diesen Beitrag haben gedankt: Mathematiker