Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TIniFile.ReadString erzeugt Schreibzugriff ? (https://www.delphipraxis.net/81485-tinifile-readstring-erzeugt-schreibzugriff.html)

hoika 28. Nov 2006 08:24


TIniFile.ReadString erzeugt Schreibzugriff ?
 
Hallo #,

ich dachte immer, dass Windows die Ini-Dateien nur zum Lesen öffnet,
wenn ich nur per ReadString zugreife.
Der Application Verifier meckert aber und sagt, ich will Schreiben. :wall:
Der folgende Code wird angemeckert.

Ich weiss, dass Ini-Dateien out sind, aber sie sind so schön einfach
für kleinere lokale Optionen.
Ich will da nicht die Registry bemühen.

Delphi-Quellcode:
      IniFile:= TIniFile.Create(ExtractFilePath(Application.ExeName)+'App.Ini');
      try
        bMultipleInstances:= IniFile.ReadBool('Options', 'bMultipleInstances', False);
      finally
        IniFile.Free;
      end;

Heiko

marabu 28. Nov 2006 08:30

Re: TIniFile.ReadString erzeugt Schreibzugriff ?
 
Hallo Heiko,

probiere es mal mit TMemIniFile anstelle von TIniFile.

Grüße vom marabu

MarcoWarm 28. Nov 2006 09:10

Re: TIniFile.ReadString erzeugt Schreibzugriff ?
 
Zitat:

Zitat von hoika
ich dachte immer, dass Windows die Ini-Dateien nur zum Lesen öffnet,
wenn ich nur per ReadString zugreife.
Der Application Verifier meckert aber und sagt, ich will Schreiben. :wall:

Scheinbar öffnet GetPrivateProfileString die Ini Datei doch nicht nur zum Lesen. Ich denke mal an diesen Routinen hat lange keiner mehr gearbeitet seit Win95. (Daher wahrscheinlich auch die Längenbeschränkung bei ReadString)

Zitat:

Zitat von hoika
Ich will da nicht die Registry bemühen.

Du kannst deinen Code fast vollständig so belassen, wenn du TRegIniFile benutzt. Das ist ein Wrapper für Registry-Zugriffe auf "Ini-Art"

hoika 28. Nov 2006 09:25

Re: TIniFile.ReadString erzeugt Schreibzugriff ?
 
Hallo,

ja, ich weiss, der Punkt ist,
der Nutzer kann dort ein paar Sachen reinschreiben,
die das Startverhalten des Programms beeinflussen.
Aber 1. es soll keiner so ohne weiteres machen können
und 2. wenn doch, soll es einfach festzulegen sein.

TRegIniFile heisst für den Nutzer "regedit fummeln".

Naja, ich werde ihm wohl ein Form dafür spendieren müssen,
obwohl es mir nicht so passt.


Heiko

MarcoWarm 28. Nov 2006 09:35

Re: TIniFile.ReadString erzeugt Schreibzugriff ?
 
Zitat:

Zitat von hoika
Aber 1. es soll keiner so ohne weiteres machen können
und 2. wenn doch, soll es einfach festzulegen sein.

das widerspricht sich. Egal, für diesen Zweck sind XML Dateien auch gut geeignet. Schön strukturiert und von erfahrenen Nutzern können die auch bearbeitet werden, ohne das Gefahr für das System besteht. Und wenn du es richtig anstellst, sind XMLs auch abschreckend genug, damit Laien die Finger davon lassen (was sie erfahrungsgemäß nicht tun)

Der_Unwissende 28. Nov 2006 09:41

Re: TIniFile.ReadString erzeugt Schreibzugriff ?
 
Hi,
ich glaube es gibt zig andere Ini-Komponenten, davon auch ein zwei recht bekannte, die eben die VCL Version ersetzen können. Da sind dann sämtliche Beschränkungen in der Größe bereits entfernt (insbesonder die 64K Grenze, soweit die in der VCL auch existiert). Einfach mal suchen, könnte sowas wie TBigIni oder so gewesen sein.

Gruß Der Unwissende

hoika 28. Nov 2006 10:22

Re: TIniFile.ReadString erzeugt Schreibzugriff ?
 
Hallo,

diese ini ist der Rest von altem Code.
Ich muss das eh umstellen.
Ich bin nur darüber gestolpert beim Test des Application Verifiers.

Zu XML, das löst das Problem nicht.
Ich habe die Ini ja im Programme-Verzeichnis ;)
Und dort erlaubt der UAC von Vista keinen Schreibzugriff.

Korrektur, der Admin darf ja,
also würde das das Problem doch lösen,
wenn die XML-Kompponente wirklich nur lesend zugreift.

Aprpos:
Welche Komponente nimmt man ???
Ich kenne bisher nur die von MS direkt.


Heiko

MarcoWarm 28. Nov 2006 10:29

Re: TIniFile.ReadString erzeugt Schreibzugriff ?
 
Zitat:

Zitat von hoika
Welche Komponente nimmt man ???
Ich kenne bisher nur die von MS direkt.

TXMLDocument
Dort kannst du als Vendor auch einen anderen als MSXML angeben. z.B OpenXML (das ist native Object Pascal)

OldGrumpy 28. Nov 2006 10:35

Re: TIniFile.ReadString erzeugt Schreibzugriff ?
 
Was spricht dagegen, die Ini-Datei an einen Ort mit Schreibrechten zu verlegen? Jeder User hat dafür ja sein eigenes Verzeichnis, leg dort einfach ein Verzeichnis mit Deinem Programmnamen an und speicher die Ini-Datei dort drin ab. Wir stellen hier auch gerade diverse Projekte dahingehend um...

Muetze1 28. Nov 2006 21:35

Re: TIniFile.ReadString erzeugt Schreibzugriff ?
 
Zitat:

Zitat von hoika
Welche Komponente nimmt man ???

Für solche INI Sachen gedacht und genutzt: XMLLib

Öffnet erst zum Schreiben, wenn geschrieben werden soll...


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:55 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz