Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   ExpressQuantumGrid TcxIniFileWriter: Ini-Datei wird "von anderem Prozess verwendet" (https://www.delphipraxis.net/196860-expressquantumgrid-tcxinifilewriter-ini-datei-wird-von-anderem-prozess-verwendet.html)

mjustin 26. Jun 2018 07:46


ExpressQuantumGrid TcxIniFileWriter: Ini-Datei wird "von anderem Prozess verwendet"
 
Guten Morgen

In einer Delphi 2009 Anwendung verwenden wir StoreToIniFile um die benutzerbezogenen Einstellungen eines QuantumGrids zu speichern.

In dieser Anwendung wird an zwei Stellen auf die gleiche Datei zugegriffen:

* beim Öffnen des Hauptformulars werden die Einstellungen für alle Grids die auf dem Hauptformular sind gelesen
* beim Öffnen eines weitren, modalen Bearbeitungsformulars werden dessen Grid-Einstellungen gelesen und beim Schliessen wieder gespeichert

Beim beim Speichern der Grid-Einstellungen des modalen Formulars kommt es oft (aber nicht immer) zu einer Exception die besagt die INI-Datei wäre bereits geöffnet.

Frage: wenn die Fehlermeldung lautet "Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.", ist damit tatsächlich ein anderer Prozess gemeint, der die Datei verwendet? Also definitiv nicht der Prozess der die Datei zu öffnen versucht?

Wenn es definitiv ein anderer Prozess ist, dann wäre es nur erklärbar mit einer gleichzeitig laufenden weiteren Instanz der Anwendung (die INI-Datei wird nur von dieser einen Anwendung erzeugt), denkbar z.B. wenn die Anwendung "hängt" und der Benutzer sie erneut startet.
Doch die Zugriffe auf die INI-Datei sind zu kurz um dann den Fehler mit einer zweiten Instanz erklären zu können.
Zweite Möglichkeit: ein Virenscanner oder ähnliches greift auf die Datei zu. Hat damit jemand schon ähnliches erlebt oder ist das nur Spekulation?

Code:
exception class  : EFCreateError
exception message : Cannot create file "\\server\dfs\Home\Username\Documents\i4Settings\Abfertigung41.1.ini". Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.

main thread ($10fc):
004822d1 +0b9 Ladelist411.exe Classes                  TFileStream.Create
004821f4 +020 Ladelist411.exe Classes                  TFileStream.Create
004809fc +018 Ladelist411.exe Classes                  TStrings.SaveToFile
0048f45d +039 Ladelist411.exe IniFiles                 TMemIniFile.UpdateFile
006e94ad +005 Ladelist411.exe cxStorage                TcxIniFileWriter.EndWrite
006e710b +05b Ladelist411.exe cxStorage                TcxStorage.StoreWithExistingWriter
006e7087 +037 Ladelist411.exe cxStorage                TcxStorage.StoreTo
006e712a +00e Ladelist411.exe cxStorage                TcxStorage.StoreToIni
0079ebc9 +06d Ladelist411.exe cxGridCustomView         TcxCustomGridView.StoreToIniFile

KodeZwerg 26. Jun 2018 07:48

AW: ExpressQuantumGrid TcxIniFileWriter: Ini-Datei wird "von anderem Prozess verwende
 
*entfernt* sorry.

uligerhardt 26. Jun 2018 14:44

AW: ExpressQuantumGrid TcxIniFileWriter: Ini-Datei wird "von anderem Prozess verwende
 
Bei uns wurden ähnliche Probleme mit Ini-Dateien schon von Virenscannern verursacht (vorzugsweise seit Windows 10 WIMRE). Umkonfigurieren derselbigen hat die Probleme beseitigt.

mjustin 26. Jun 2018 15:15

AW: ExpressQuantumGrid TcxIniFileWriter: Ini-Datei wird "von anderem Prozess verwende
 
Zitat:

Zitat von uligerhardt (Beitrag 1405869)
Bei uns wurden ähnliche Probleme mit Ini-Dateien schon von Virenscannern verursacht (vorzugsweise seit Windows 10 WIMRE). Umkonfigurieren derselbigen hat die Probleme beseitigt.

Vielen Dank für die Bestätigung meiner "wilden Spekulation"! :-D

Dann wäre es tatsächlich genau so wie die Fehlermeldung besagt; es ist ein anderer Prozess, der die Datei verwendet, nicht die Delphi Anwendung, die das TFileStream.Create versucht.

hoika 26. Jun 2018 15:34

AW: ExpressQuantumGrid TcxIniFileWriter: Ini-Datei wird "von anderem Prozess verwende
 
Hallo,
da es eine Netzwerk-Freigabe ist, könnte man auch auf dem Server nachsehen,
welches Programm dieser "andere" Prozess ist.

Das klappt natürlich nur, wenn der andere Prozess sich etwas Zeit lässt,
wenn das zu schnell geht, dann nicht.

Ich würde da wieder pragmatisch vorgehen.
Delphi-Quellcode:
for i:= 1 to 10 do
begin
  try
    Speichern;
    break;
  except
    ;
  end;
end;
Wenn es keine überlebenswichtigen Einträge sind.


Dann würde ich noch die Schreibzugriffe optimieren
(nur schreiben, wenn sich wirklich was geändert hat)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:26 Uhr.

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