Seite 3 von 4
Verfasst: 17.09.2006 18:32
von Thorsten1867
funk.munich hat geschrieben:Hättest Du evtl. ein kleines Bsp. für mich?
Das Beispiel habe ich dir schon geschrieben:
Code: Alles auswählen
TempDir$ = C:\Temp\Test
PackName$ = Installer.exe
CreateDirectory(TempDir$)
OpenFilePack(PackName$)
ExtractPack(TempDir$)
CloseFilePack()
Compiliere es als "Installer.exe"
Verfasst: 17.09.2006 18:58
von funk.munich
Hi Thorsten,
ich habe eine Installer.exe mit dem folgenden Code compiliert:
Code: Alles auswählen
XIncludeFile "PackerEx_IncludeV4.pb"
CreateFilePack("icons.pck",0,0)
AddFileToPack("logo00.png","icons.pck",9)
CloseFilePack(0)
AppendFilePack("setup.exe","icons.pck")
zuvor noch eine setup.exe compiliert:
Code: Alles auswählen
XIncludeFile "PackerEx_IncludeV4.pb"
OpenFilePack("icons.pck",0,0)
ExtractPack("D:\")
CloseFilePack(0)
Die Aufgaben des Installers haben sogar funktioniert
Und die pck Datei wurde wohl auch an die setup.exe angehängt.
Da hätte ich eine Frage:
Vor dem Anhängen der pck Datei an die setup.exe hatte die Datei die Größe (~41 KB). Nachdem Anhängen die Größe (~224 MB)
Ist das korrekt (glaube ich eigentlich nicht)!
Wenn ich nun die setup.exe aufrufe, damit die pck Datei nach D: entpackt werden soll, funktioniert leider nicht. Hättest Du da noch einen Vorschlag für mich.
Generell bin ich froh keinen Installer selber zu schreiben, da mir die Expertise fehlt und ich da lieber auf Deinen Installer zugreife.
Mir geht es einfach nur darum das Prinzip und den Aufbau/Ablauf (im kleinen) zu verstehen.
Man dankt für jede Hilfe.
Daniel
Verfasst: 17.09.2006 21:39
von Thorsten1867
Falscher Parameter bei "AddFileToPack()". Der erste enthält die Datei mit Pfad und der zweite die Datei ohne Pfad (bzw. Pfad im Archiv) :
Code: Alles auswählen
XIncludeFile "PackerEx_IncludeV4.pb"
CreateFilePack("icons.pck",0,0)
AddFileToPack("logo00.png","logo00.png",9)
CloseFilePack(0)
AppendFilePack("setup.exe","icons.pck")
Der Name der Packdatei stimmt nicht:
Code: Alles auswählen
XIncludeFile "PackerEx_IncludeV4.pb"
OpenFilePack("setup.exe")
ExtractPack("D:\")
CloseFilePack()
Verfasst: 22.09.2006 16:52
von funk.munich
Hi Thorsten,
vielen Dank. Jetzt hat alles einwandfrei funktioniert
Das war ja nun der Vorgang wie man eine pck Datei an eine kompilierte Datei anhängt.
Wie kann ich mir das denn bei einer selbstextrahierenden Datei vorstellen?
Und wie kann man als erstes überhaupt eine selbstextrahierende Datei
in PB erstellen?
Vielen Dank für Deine Hilfe,
Daniel
Verfasst: 22.09.2006 22:43
von Thorsten1867
Wenn du diesen Code für die Setup-Exe verwendest, entpackt sich diese Datei beim Start selbst. ( = selbstextrahierenden Datei)
Code: Alles auswählen
XIncludeFile "PackerEx_IncludeV4.pb"
OpenFilePack("setup.exe")
ExtractPack("D:\Temp")
CloseFilePack()
Verfasst: 07.05.2007 17:34
von Knight_Rider_2000
Entschuldigt mich das ich diesen Thread hervorhole aber in keinem mir bekannten Thread ist Packerex so gut erklärt. Wenn der Installer dem Setup.exe die .pck hinzufügt wie kann man dort die Progressbar mit integrieren damit man sieht welche Datei gerad hinzugefügt wird?
Verfasst: 07.05.2007 18:29
von Thorsten1867
Benutze ein 'CallBack', z.B. in 'CloseFilePack(callback)':
Entpacken mit Progressbar:
Code: Alles auswählen
Global PackProgress.l
Procedure PackCallBack()
PackProgress + PackItem()\Size
SetGadgetState(#Gadget_Installer_ProgressBar,PackProgress)
EndProcedure
OpenFilePack(TempDir$ + "setup.pck", @PackCallBack())
PackProgress = 0
SetGadgetAttribute(#Gadget_Installer_ProgressBar, #PB_ProgressBar_Maximum, Pack\fullsize) ; Max-Wert
..... ; Entpacken der Dateien
CloseFilePack()
Anzeigen der Prozentzahl. Kann man genausogut auf einen Progressbar (mit Max=100 s.o.) übertragen:
Code: Alles auswählen
Global Prozent.b
Procedure PackCallBack(SourcePosition, DestinationPosition)
If SourcePosition = -1
Prozent = 0
StatusBarText(#StatusBar_Main, 0, " "+language(#Lang_StatusBar_ProgFiles)+" "+PackItem()\Name)
ElseIf SourcePosition >= 0
actprogress.f = SourcePosition / PackItem()\Size * 100
If actprogress > 100 : actprogress = 100 : EndIf
If Prozent <> Int(actprogress)
Prozent = Int(actprogress)
StatusBarText(#StatusBar_Main, 1, RSet(Str(Prozent),3)+"%")
EndIf
EndIf
While WindowEvent():Wend
ProcedureReturn 1
EndProcedure
Procedure PackDir(Dir$, PackDatei$) ; Pack Directory
Prozent = 0
CreateFilePack(PackDatei$, 0, #Null)
AddFullDirectoryToPack(Dir$, 9, 0)
CloseFilePack(@PackCallBack())
StatusBarText(#StatusBar_Main, 1, "")
EndProcedure
Verfasst: 08.05.2007 17:12
von Knight_Rider_2000
Ich meinte eig eine Progressbar beim Packen
Verfasst: 08.05.2007 17:26
von Thorsten1867
Siehe 2. Beispiel!
Code: Alles auswählen
Procedure PackDir(Dir$, PackDatei$) ; Pack Directory
SetGadgetAttribute(#Gadget_ProgressBar, #PB_ProgressBar_Maximum, 100)
Prozent = 0
CreateFilePack(PackDatei$, 0, #Null)
AddFullDirectoryToPack(Dir$, 9, 0)
CloseFilePack(@PackCallBack())
EndProcedure
StatusBarText(#StatusBar_Main, 0, ".....")
ersetzen durch:
SetGadgetState(#Gadget_ProgressBar, Prozent)
Verfasst: 08.05.2007 19:51
von Knight_Rider_2000
PackDir ist nicht was ich suche, das sollte mit AddFileToPack gehen.