Das Spiel wird in einem temporären Verzeichnis entpackt, gestartet und das Verzeichnis nach Programmende wieder entfernt.
Hier eine Hardcopy meiner Beta vom 02.04.2006:

Eigentlich funktioniert mein Programm ganz gut, aber in Verbindung mit großen Spielen habe ich folgendes Problem:
Wie kann ich den von ExtractPack(TempDir$) benötigten Arbeitsspeicher (ca. 350 MB) wieder freigeben ohne das Programm zu beenden?
Hier ein Auszug meines Quellcodes zum Entpacken:
Das Spiel meines Freundes hat 182 MB.;--- Spiel in temporärem Unterverzeichnis entpacken ---
If OpenFilePack(PackName$,1,listcallback) = 0
Text$ = "Das Archiv kann nicht geöffnet werden!"
MessageRequester(" 3dgsPurePacker",Text$,0 | #MB_ICONWARNING)
End
EndIf
ExtractPack(TempDir$)
CloseFilePack(listcallback)
;--- Spiel bzw. Screensaver starten ---
If RunProgram(TempName$,"",TempDir$,1) = 0
Text$ = "Das Programm kann nicht gestartet werden!"
MessageRequester(" 3dgsPurePacker",Text$,0 | #MB_ICONWARNING)
End
EndIf
;--- Temporäre Verzeichnisse löschen ---
If LCase(CheckDelete$) = "j"
DeleteDirectory(TempDir$, "*.*",#PB_FileSystem_Recursive|#PB_FileSystem_Force)
EndIf
Nach dem Packen sind es noch 102 MB.
Mein PC hat 512 MB Arbeitsspeicher.
Die Auslagerungsdatei zeigt laut Task-Manager vor dem Entpacken 262 MB an.
Nach OpenFilePack(PackName$,1,listcallback) werden 440 MB angezeigt.
Nach ExtractPack(TempDir$) sind es bereits 616 MB.
Leider wird der Speicher nach ExtractPack nicht mehr freigegeben, was die Auslagerungsdatei weiter vergrößert.
Mit RunProgram(TempName$,"",TempDir$,1) wird das Spiel gestartet und die Auslagerungsdatei auf 840 MB aufgeblasen.
Der Entpacker wartet, bis das Spiel beendet ist und löscht anschließend wieder das temporäre Verzeichnis.
Das ungepackte Spiel benötigt zum Start 40 Sekunden bei "nur" 490 MB Auslagerungsdatei.
Das sind immerhin 350 MB weniger Arbeitsspeicherbedarf, als bei der gepackten Version.
Das gepackte Spiel benötigt bedingt durch die große Auslagerungsdatei von 840 MB zum Start über zwei Minuten.
Ich darf aber den Entpacker nicht vor Spielende beenden, weil ich anschließend wieder das temporäre Spieleverzeichnis entfernen muss.
RunProgram(TempName$,"",TempDir$,0) scheidet also als Lösung aus.
Gibt es eine Möglichkeit, den von ExtractPack() zum Entpacken benötigten Arbeitsspeicher (ca. 350 MB) vor Spielbeginn wieder freizugeben, ohne den Entpacker vorzeitig zu beenden?
(Wer möchte, kann meine Beta-Version vom 02.04.2006 unter folgendem Link downloaden und ausprobieren:
http://www.projekt-3d.de/Tracker60/3dgs ... r_Beta.zip
Was noch fehlt, sind eine deutsche und eine englische CHM-Hilfedatei, die ich noch erstellen muss)