Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Virenscanner killt App (https://www.delphipraxis.net/216231-virenscanner-killt-app.html)

Ykcim 25. Nov 2024 14:44

Virenscanner killt App
 
Hallo Zusammen,

wir haben gerade ein Problem mit einem eigenen Programm, dass immer mal wieder bei einer bestimmten Procedure vom VirenScanner gekillt wird. In dieser Procedure werden vorab von dem Benutzer xml- Files und dazugehörige ZIP-Archive in einem Ordner gespeichert. Die Procedure führt folgende Schritte aus:
1. Entpacken des ZIP-Archivs an einen bestimmten Ort
2. Löschen des ZIP-Archivs
3. Öffnen des xml-Files und Änderung von zwei Werten
4. Speichern des geänderten xml-Files an einem anderen Ort
4. Löschen des ursprünglichen xml-Files

So sehen die Proceduren aus:

ZIP-File entpacken:
Delphi-Quellcode:
function TLogic.ExctractZIP(ZipPfad, ExtractPfad: string): boolean;
var  ZFile: TZipFile;
begin
   Try
      ZFile:= TZipFile.Create;
      Try
         ZFile.Open(ZipPfad, zmRead);
         ZFile.ExtractAll(ExtractPfad);
         Result:= true;
      Finally
         ZFile.Free;
      End;
   Except
      On E: Exception do begin
         MessageDlg('Die Datei ' + ZipPfad + ' konnte nicht entpackt werden. Message: ' + E.Message + ' Bitte manuell eingreifen und den Administrator informieren.', mtError, [mbOK], 0);
         Result:= false;
      end;
   End;
end;
xml-File verändern und speichern
Delphi-Quellcode:
function TLogic.XMLEdit(xmlPfad: string; TargetPfad: string): Boolean;
var  WmDKntn: IXMLNode;
      XMLDcmnt: IXMLDocument;
      NwVlDateien, NwVlWF_Name, NwFlNm: string;
begin
   Try
      if TargetPfad[Length(TargetPfad)] <> '\' then begin
         TargetPfad:= TargetPfad + '\';
      end;
      XMLDcmnt:= LoadXMLDocument(xmlPfad);
      NwFlNm:= ChangeFileExt(ExtractFileName(xmlPfad), '.xml');
      WmDKntn:= XMLDcmnt.DocumentElement;
      NwVlDateien:= StringReplace(WmDKntn.ChildNodes.FindNode('Dateien').ChildNodes.FindNode('Dateiname').NodeValue, '.zip','.pdf',[rfIgnoreCase, rfReplaceAll]);
      NwVlWF_Name:= StringReplace(WmDKntn.ChildNodes.FindNode('WF_Name').ChildNodes.FindNode('WF_Name').NodeValue, '.zip','.pdf',[rfIgnoreCase, rfReplaceAll]);
      WmDKntn.ChildNodes.FindNode('Dateien').ChildNodes.FindNode('Dateiname').NodeValue:= NwVlDateien;
      WmDKntn.ChildNodes.FindNode('WF_Name').ChildNodes.FindNode('WF_Name').NodeValue:= NwVlWF_Name;
      XMLDcmnt.SaveToFile(TargetPfad + ChangeFileExt(NwVlDateien, '.xml'));
      Result:= true;
   Except
      On E: Exception do begin
         MessageDlg('Die Datei ' + xmlPfad + ' konnte nicht editiert werden. Message: ' + E.Message + ' Bitte manuell eingreifen und den Administrator informieren.', mtError, [mbOK], 0);
         Result:= false;
      end;
   End;
end;
Ursprungsdatei löschen
Delphi-Quellcode:
DeleteFile(FList[I]);
Hat jemand eine Idee, was ich tun muss, dass der Virenscanner die Procedure akzeptiert?

Oftmals läuft das Programm problemlos durch, aber manchmal schnappt der Virenscanner zu.

Vielen Dank
Patrick

himitsu 25. Nov 2024 15:27

AW: Virenscanner killt App
 
Warum extrahierst du die XMLs erst auf die Festplatte?

Extrahiere sie in einen Stream und aus dem Stream (z.B. TStringStream) wird die XML innerhalb des Programms in die XML-Komponente geladen.

Papaschlumpf73 25. Nov 2024 15:28

AW: Virenscanner killt App
 
Das kommt natürlich primär darauf an, ob du den Virenscanner oder deine Procedure anpassen willst. Insgesamt mögen Virenscanner diese zahlreichen Dateioperationen überhaupt nicht. Du könntest mal probieren,

a) Alle Zipdateien erst am Ende mit einer einzigen Aktion (Delete *.zip) zu löschen, statt jede ZIP-Datei einzeln
b) ich benutze z.B. ZipForge. Statt die xml-Datei in eine Datei zu extrahieren, würde ich sie damit als Stream aus der zip-Datei ins XML-Doc laden, manipulieren und dann speichern. Ggf. kann TZipFile auch in einen Stream statt in eine Datei speichern.

Ykcim 25. Nov 2024 16:12

AW: Virenscanner killt App
 
Hallo Zusammen,

ich habe mich etwas unverständlich ausgedrückt.

Aus dem Internet wird eine xml-Datei und ein ZIP-Archiv heruntergeladen. Das Ganze passiert mehrfach, aber es gehören immer eine xml-Datei und ein ZIP-Archiv zusammen. Die xml-Datei ist aber nicht in dem ZIP-Archiv. In dem ZIP-Archiv ist eine PDF-Datei. (Konstrukt vom Kunden) Daher extrahiere ich die xml-Datei gar nicht, sondern sie wurde vorab von einem FTP-Server heruntergeladen, wie auch das ZIP-Archiv, in dem die PDF-Datei steckt...

Die entpackte PDF-Datei und die xml-Datei müssen an unterschiedlichen Speicherorten auf unseren Servern gespeichert werden. In der xml-Datei ist ein Verweis zu dem ZIP-Archiv, welchen ich ändere, sodass der Verweis auf die entpackte PDF-Datei zeigt.

Ich kann die xml-Datei nicht unbearbeitet in den Zielordner legen, denn dann würde das ERP-System diese sofort verarbeiten und es würde im ERP-System knallen.

Das Löschen könnte ich zusammenfassen, dass ich alle Dateien aus dem Download-Ordner zusammen lösche. Ich habe es einzeln gemacht, weil ich jedes Mal nur nach Erfolgsmeldung lösche. Das könnte ich dann nicht mehr machen und müsste sozusagen blind alles löschen...

Ich kann leider nicht sagen, bei welcher Aktion der Virenscanner zuschlägt.

Irgendwie ist die Situation unbefriedigend...

LG Patrick

Sinspin 25. Nov 2024 18:45

AW: Virenscanner killt App
 
Zitat:

Zitat von Ykcim (Beitrag 1543502)
Ich kann leider nicht sagen, bei welcher Aktion der Virenscanner zuschlägt.

Nach und/oder vor jeder Aktion einen Logeintrag in Textdatei oder Windows Events schreiben. Schon kannst Du sehen welches die letzte Aktion war.

Generell ist das aber schon ein komisches Verhalten für einen Vierenscanner. Veränderst du auch die PDF Datei?

Ykcim 27. Nov 2024 07:39

AW: Virenscanner killt App
 
Zitat:

Veränderst du auch die PDF Datei?
Nein, die PDF wird nur entpackt...

Zurzeit versuchen wir es mit whitelisten im Virenscanner.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:37 Uhr.

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