AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Hilfedatei temporär erstellen und wieder löschen
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfedatei temporär erstellen und wieder löschen

Ein Thema von devidespe · begonnen am 6. Jun 2014 · letzter Beitrag vom 8. Jun 2014
Antwort Antwort
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
434 Beiträge
 
Delphi 10.4 Sydney
 
#1

Hilfedatei temporär erstellen und wieder löschen

  Alt 6. Jun 2014, 20:34
Hallo,

während meiner Programminitialisierung erstelle ich eine relativ kleine Hilfedatei im temporären Verzeichnis (Umgebungsvariable TEMP) und weise den Pfad zu Application.Helpfile zu. Das funktioniert soweit ganz gut.

Kurz vor dem Programmende lösche ich diese Datei wieder mittels DeleteFile, das funktioniert auch. Allerdings funktioniert es nicht, wenn ich die Hilfedatei mindestens einmal in der Applikation angezeigt habe, also der Anwender min. einmal F1 gedrückt hat. Ich vermute, die Applikation öffnet die Datei dann und schließt sie irgendwann zum Ende, so dass mein Löschvorgang auf die Datei nicht wirken kann.

Was kann man da tun?
Devid
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat
Pfaffe

Registriert seit: 29. Jan 2009
294 Beiträge
 
Delphi 12 Athens
 
#2

AW: Hilfedatei temporär erstellen und wieder löschen

  Alt 6. Jun 2014, 21:23
Wahrscheinlich mußt Du die Hilfedatei mit Application.HelpCommand(HELP_QUIT, 0) vor dem löschen schließen.
  Mit Zitat antworten Zitat
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
434 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Hilfedatei temporär erstellen und wieder löschen

  Alt 6. Jun 2014, 21:30
Die Hilfe, wenn sie denn offen ist, wird durch den Befehl geschlossen. Der anschließende Löschvorgang scheitert aber trotzdem...
Devid
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#4

AW: Hilfedatei temporär erstellen und wieder löschen

  Alt 6. Jun 2014, 21:34
Zitat von Die OH sagt ...:
Before closing the window that requested help, the application must call WinHelp with the uCommand parameter set to HELP_QUIT. Until all applications have done this, Windows Help will not terminate. Note that calling Windows Help with the HELP_QUIT command is not necessary if you used the HELP_CONTEXTPOPUP command to start Windows Help.

Wie erstellst du denn die Datei?

Wenn man dafür FILE_ATTRIBUTE_TEMPORARY (MSDN-Library durchsuchenCreateFile) verwendet, dann löscht Windows die Datei automatisch, selbst wenn dein Progamm abstürzt.
In wie weit FILE_FLAG_DELETE_ON_CLOSE helfen könnte, kann ich jetzt nicht sagen.



Alternativ gäbe es auch andere Hilfesysteme, als diese HLP-Dateien.

Warum erstellst du diese Datei eigentlich erst zur Laufzeit?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 6. Jun 2014 um 21:37 Uhr)
  Mit Zitat antworten Zitat
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
434 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Hilfedatei temporär erstellen und wieder löschen

  Alt 6. Jun 2014, 21:49
Ich erstelle die Datei zur Laufzeit, weil ich sie dabei haben möchte, dem Kunden aber keine zusätzliche Datei mitgeben möchte.

Die Datei liegt in einem internen Array als Ressource vor und wird mittels Rewrite und Blickwrite erstellt. Vielleicht sollte ich zu Createfile umschwenken...
Devid
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#6

AW: Hilfedatei temporär erstellen und wieder löschen

  Alt 6. Jun 2014, 22:24
Du kannst ja einfach mal probieren, ob sich diese Datei auch direkt aus den Resourcen laden lässt,

http://msdn.microsoft.com/en-us/libr...loband%29.aspx
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Hilfedatei temporär erstellen und wieder löschen

  Alt 8. Jun 2014, 04:56
Also ich würde die Anwendung in einer Zip-Datei verteilen oder aber die Hilfe-Datei aus der Ressource extrahieren und nicht wieder löschen. Also nur extrahierten, wenn sie nicht gefunden wird. Alles andere ist irgendwie - komisch.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
434 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Hilfedatei temporär erstellen und wieder löschen

  Alt 8. Jun 2014, 15:04
Wie erstellst du denn die Datei?

Wenn man dafür FILE_ATTRIBUTE_TEMPORARY (MSDN-Library durchsuchenCreateFile) verwendet, dann löscht Windows die Datei automatisch, selbst wenn dein Progamm abstürzt.
In wie weit FILE_FLAG_DELETE_ON_CLOSE helfen könnte, kann ich jetzt nicht sagen.

Alternativ gäbe es auch andere Hilfesysteme, als diese HLP-Dateien.
So ich habe die Dateierstellung auf CreateFile umgeschrieben, auch in Verbindung mit FILE_ATTRIBUTE_TEMPORARY und FILE_FLAG_DELETE_ON_CLOSE. Ersteres hat leider keinen Einfluss, die Datei lässt sich nachwievor nicht löschen. Bei FILE_FLAG_DELETE_ON_CLOSE wird die Datei garnicht erst erstellt und ich kann die Hilfe nicht laden. Das passiert folgendermaßen:

Delphi-Quellcode:
FHandle:=CreateFile(PChar(Filename),
                        GENERIC_WRITE,
                        0,
                        nil,
                        CREATE_ALWAYS,
                        FILE_ATTRIBUTE_TEMPORARY,
                        0);
Sicher gibt es andere Hilfesysteme, ich habe nun aber alles auf diese CHM-Datei ausgerichtet und dachte, ein einfacher Löschvorgang wäre nicht problematisch. Leider doch...
Devid
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#9

AW: Hilfedatei temporär erstellen und wieder löschen

  Alt 8. Jun 2014, 16:16
Ja, nicht du löschst diese Datai.

Du beendest einfach dein Programm und wenn alle Programme, auch das WinHelp, die Datei freigegeben haben, dann räumt Windows auf.
Also nicht vergessen dein FileHandle offen zu lassen, bis zum Programmende. (da WinHelp die Datei ja anfangs noch nicht offen hat)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 8. Jun 2014 um 16:27 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:08 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