PDF Export - Dateizugriff verweigert

Hallo

Vorgang:
Bei automatischen nächtlichen Testläufen unserer Anwendung werden PDF Dokumente mittels ListLabel.Export() exportiert und daraufhin sofort weiterverarbeitet.
z.B. durch Aufruf von File.Copy() in einen Dokumenten-Ordner kopiert.

Problem:
Dabei kommt es in unbestimmten Abständen zu Abstürzen beim Zugriff auf die PDF-Datei, welche in einen Temp-Ordner exportiert wird:
System.IO.IOException
Der Prozess kann nicht auf die Datei “C:\Users[Username]\AppData\Local\Temp\SMS_Print\20210204_025640_832890.ll.pdf” zugreifen, da sie von einem anderen Prozess verwendet wird.

Informationen:
Langwierige Versuche in unserer Entwicklungsumgebung (ca. 1 aus 200 Exportvorgängen in diesem Anwendungs-Testlauf-Kontext) haben ergeben, dass die PDF-Datei nach einer gewissen Zeit wieder freigegeben ist. Eine genaue Zeitdauer konnte leider nicht ermittelt werden.
In einem Testprojekt ließ sich das Verhalten von uns leider noch nicht reproduzieren.
Verwendet wird C#, .NET Framework 4.8, x86, LL26.001

Vermutung:
Da wir List&Label bereits seit Jahren äußerst erfolgreich einsetzen, vermuten wir hier eventuell einen Zusammenhang mit dem “Neuen PDF-Export” in LL26.

Quelle: https://www.combit.net/reporting-tool/version-26-list-label/
Neuer PDF-Export
Erzeugen Sie kleinere Export-Dateien bei besserer Qualität:

  • Unterstützung für Bilder mit CMYK-Farbraum
  • Automatische Unterstützung für internationale Zeichensätze und Schriftarten (Unicode Fonts)
  • Verbesserte Unterstützung für komplexe Vektorgrafiken (z.B. CAD)
  • Auswählbare PDF-Version von 1.0 bis 2.0 mit höherer Verschlüsselung

Frage:
Gibt es Erfahrungen oder Hinweise darauf, dass die erzeugte PDF-Datei nach dem Aufruf von ListLabel.Export() noch eine gewisse Zeit blockiert werden könnte?

Mit freundlichen Grüßen
Robert Kropp

Hallo Herr Kropp,

vielen Dank für die sehr ausführlichen Informationen - prima!

Doch bislang ist ein Locking der PDF-Dokumente in List & Label nach deren Export nicht bekannt. Aber ich nehme an dieser Stelle an, dass .Export() und das anschließende File.Copy() auch sync aufgerufen werden und nicht async?

Es macht sonst aber den Anschein, dass sich für die PDF-Dokumente vielleicht noch anderen Anwendungen/Prozesse interessieren könnten wie bspw. Virenscanner ala Windows Defender/SmartScreen oder ähnliche. Ob man den Virenscanner versuchen kann als Ursache auszuschließen?

Anderenfalls könnte ggf. mit einem Tool wie Procmon versuchen den “Täter” des File-Locks zu identifizieren.

Doch bei einem Verhalten, dass leider nur sehr sporadisch auftritt, wird es dennoch schwer fallen die Ursache ausfindig zu machen. Ich bin gespannt, ob mit diesen Infos das Problem aus der Welt geschaffen werden kann. Anderenfalls kommen Sie bitte nochmal auf uns zu, damit wir Weiteres gemeinsam überlegen können.

Beste Grüße,
Daniel Stein

Hallo Herr Stein

Der Code welcher den .Export() durchführt und anschließend die Datei verarbeitet läuft synchron ab.

Herzlichen Dank für die vielen Hinweise! Wir werden weitersuchen, beobachten und hier berichten, wenn wir näheres über den “Täter” herausfinden konnten.

Mein Kollege @Markus_Doppler1 hat mich darauf hingewiesen, dass es (um z.B. Zugriffsprobleme zu vermeiden) bei Exportvogängen allgemein hilfreich wäre, mit Streams arbeiten zu können. Ähnlich diesem Beitrag aus dem IdeaPlace, für welchen wir bereits gevotet haben: Allow pdf export to .Net memorystream

Mit freundlichen Grüßen
Robert Kropp