Balrog Installer Tool ins Deutsche übertragen
Verfasst: 21.01.2005 00:17
Ich habe vor einiger Zeit im internationalen PB-Forum den Skript eines Installertools von Balrog Software gefunden, da ich grad mal sowas gebraucht habe. Ich habe das Tool für meine eigene Zwecke ins Deutsche übersetzt. Vielleicht interessieren sich ja auch andere PB-User dafür.
(Ich hoffe, ich begehe damit keine Urheberrechtsverletzung -aber ich denke, dass codes die in den Foren veröffentlicht werden allen Usern zugänglich sein sollen)
1. Der Code, der eine Installexe herstellt
und der zweite Teil dazu, das Installerhauptprogramm:
Hab dann später den Pureinstaller gefunden, der wesentlich besser ist, aber für kleine Anwendungen genügt dieses Programm auch.
(Ich hoffe, ich begehe damit keine Urheberrechtsverletzung -aber ich denke, dass codes die in den Foren veröffentlicht werden allen Usern zugänglich sein sollen)
1. Der Code, der eine Installexe herstellt
Code: Alles auswählen
; Installer utility program
Global Image
Procedure ExtractFile(File.s)
Address=NextPackFile()
Size = PackFileSize()
MemAddress=AllocateMemory(Size)
CopyMemory(Address,MemAddress,Size)
If CreateFile(0,File.s)
WriteData(MemAddress,Size)
CloseFile(0)
Else
MessageBox_(0,"Ich kann diese Datei nicht erstellen!:"+Chr(10)+File.s,WindowName.s,#MB_ICONWARNING)
ClosePack()
End
EndIf
FreeMemory(MemAddress)
EndProcedure
Procedure.s GetTempFileName()
temppath.s=Space(255)
GetTempPath_(255,temppath)
stemp.s=Space(255)
GetTempFileName_( temppath, "KPD", 0, @sTemp.s)
ProcedureReturn sTemp.s
EndProcedure
Enumeration
#Installer_Window
EndEnumeration
;
Enumeration
#SVM_LOGO
#Text
#Frame3D_0
#Text_3
#InstallPath
#OpenRequester
#Install
#Exit
#Text_4
#ProgressBar
#help
EndEnumeration
a$=Space(255) : GetModuleFileName_(0,@a$,255) : appname$=GetFilePart(a$)
If ReadFile(0, appname$)
FileSeek(Lof()-12)
lenpack.l = ReadLong()
FileSeek(Lof()-8)
leninstall.l = ReadLong()
FileSeek(Lof()-4)
lenicon.l = ReadLong()
*mempack = AllocateMemory(lenpack)
FileSeek(Lof()-12-leninstall-lenpack-lenicon)
ReadData(*mempack, lenpack)
*meminstall = AllocateMemory(leninstall)
FileSeek(Lof()-12-leninstall-lenicon)
ReadData(*meminstall, leninstall)
*memicon = AllocateMemory(lenicon)
FileSeek(Lof()-12-lenicon)
ReadData(*memicon, lenicon)
tmpfilepack.s=GetTempFilename()
If CreateFile(1, tmpfilepack.s)
WriteData(*mempack, lenpack)
CloseFile(1)
EndIf
tmpfileinstall.s=GetTempFilename()
If CreateFile(1, tmpfileinstall.s)
WriteData(*meminstall, leninstall)
CloseFile(1)
EndIf
tmpfileicon.s=GetTempFilename()
If CreateFile(1, tmpfileicon.s)
WriteData(*memicon, lenicon)
CloseFile(1)
EndIf
CloseFile(0)
EndIf
Global WindowName.s, WindowText.s, FinalMessage.s
NewList InstallerScript.s()
If ReadFile(0, tmpfileinstall.s)
WindowName.s=ReadString()
WindowText.s=ReadString()
FinalMessage.s=ReadString()
;eingefügt
InstallPath.s=ReadString()
;ende einfüg
ProgramDir.s=ReadString()
While Eof(0)=0
LastElement(InstallerScript())
AddElement(InstallerScript())
InstallerScript()=ReadString()
Wend
CloseFile(0)
EndIf
If lenicon>0
LoadImage(0,tmpfileicon.s)
UseImage(0)
Image=ImageID()
EndIf
Procedure Open_Installer_Window()
If OpenWindow(#Installer_Window, 357, 261, 220, 320, #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered , WindowName.s)
If CreateGadgetList(WindowID())
ImageGadget(#SVM_LOGO, 5, 5, 32, 32, Image)
TextGadget(#Text, 40, 5, 175, 100, WindowText.s, #PB_Text_Center)
Frame3DGadget(#Frame3D_0, 5, 145, 210, 100, WindowName.s)
TextGadget(#Text_3, 15, 175, 30, 15, "Pfad:")
;StringGadget(#InstallPath, 45, 170, 135, 20, "",#PB_String_ReadOnly)
StringGadget(#InstallPath, 45, 170, 135, 20, "")
;StringGadget(#InstallPath, 45, 170, 135, 20, "")
;ButtonGadget(#OpenRequester, 185, 170, 20, 20, "...")
ButtonGadget(#Install, 15,200, 90, 20, "Installiere in:")
ButtonGadget(#Exit, 115, 200, 90, 20, "Exit")
ProgressBarGadget(#ProgressBar, 15, 225, 190, 10, 0, 100)
TextGadget(#Text_4, 70, 300, 90, 15, "ScriptVM Installer")
ButtonGadget(#help,65,260,90,25,"Hilfe")
EndIf
EndIf
EndProcedure
Open_Installer_Window()
Repeat
Event = WaitWindowEvent()
If Event = #PB_EventCloseWindow
Quit=1
EndIf
If Event = #PB_EventGadget
GadgetID = EventGadgetID()
If GadgetID = #Install
InstallDir.s=GetGadgetText(#InstallPath)
CreateDirectory(InstallDir.s)
If OpenPack(tmpfilepack)
ItemNb=CountList(InstallerScript())
CountFiles=0
For It=0 To ItemNb-1
SelectElement(InstallerScript(),It)
If StringField(InstallerScript(),1,"|")="INSTALL"
ExtractFile(InstallDir.s+StringField(InstallerScript(),3,"|")+StringField(InstallerScript(),2,"|"))
ElseIf StringField(InstallerScript(),1,"|")="MAKEDIR"
CreateDirectory(InstallDir.s+StringField(InstallerScript(),2,"|"))
EndIf
percent.f=((It+1)/ItemNb)*100
SetGadgetState(#ProgressBar, percent.f)
Next It
ClosePack()
EndIf
MessageBox_(0, FinalMessage.s, WindowName.s,#MB_ICONINFORMATION)
Quit=1
ElseIf GadgetID = #Exit
Quit=1
ElseIf GadgetID = #InstallPath
InstallDir.s=GetGadgetText(#InstallPath)
ElseIf GadgetID = #OpenRequester
InstallDir.s=PathRequester("Ein von Ihnen gewähltes Verzeichnis ' "+ProgramDir.s+" ' wird erstellt."+Chr(10)+"Wählen Sie ein Verzeichnis:","")
If Right(InstallDir.s,1)<>"\" : InstallDir+"\" : EndIf
If Len(InstallDir)>1
InstallDir.s+ProgramDir.s
Else
InstallDir.s=""
EndIf
SetGadgetText(#InstallPath,InstallDir.s)
ElseIf GadgetID = #help ;----------Code zurück
;+ Chr(10)oder Chr(13) ; Chr(10) wird nur für den Zeilenumbruch benötigt
MessageRequester("Hilfe zur Balrog Installer-EXE ","1.Nachdem Sie den Installer gestartet haben, geben Sie im freien Feld bei << Pfad >> nur einen "+Chr(10)+" Laufwerksbuchstaben c:\ oder d:\ oder e:\ usw.ein. Das Programm wird mit seinem "+Chr(10)+" Anwendungsnamen (siehe Installerüberschrift) in das von Ihnen gewählte Laufwerk entpackt, "+Chr(10)+" sobald sie auf den << Installiere in: >>-Knopf drücken"+Chr(10)+"2. Das Programm legt während seiner Installation keinerlei versteckte Dateien im Windowssystem-"+Chr(10)+" Verzeichnis oder in der Registry ab. Es wird lediglich in einen Ordner mit seinem Anwendungs- "+Chr(10)+" namen kopiert."+Chr(10)+"3. Eine Deinstallation ist daher einfach und problemlos möglich. Sie löschen einfach den Ordner mit"+Chr(10)+" dem Anwendungsnamen des Programms vom Laufwerk, in welches sie das Programm entpackt"+Chr(10)+" haben. Und die ganze Deinstallation des Programms ist erledigt."+Chr(10)+Chr(10)+" Wichtige Anmerkung; ***** Haftungsausschluss ****"+Chr(10)+" - Obwohl dieses Programm ausführlich getestet wurde übernimmt der Autor keine Haftung für "+Chr(10)+" Schäden, die an Ihrer Soft- oder Hardware durch die Benutzung dieses Programms, das jetzt"+Chr(10)+" auf Ihrem Rechner installiert wird, möglicherweise entstehen können !"+Chr(10)+Chr(10)+" Hilfe verfasst von c) ProgrammAutor xyz usw. ",0)
;EndIf
EndIf
EndIf
Until Quit=1
FreeMemory(-1)
DeleteFile(tmpfilepack)
DeleteFile(tmpfileinstall)
DeleteFile(tmpfileicon)
End
Code: Alles auswählen
;This is the installer tool creation, with this code generate the pack,
;the actions txt file And include on a stand-alone executable file:
Code:
; Installer tool by Balrog Software
Enumeration
#Window_0
EndEnumeration
Enumeration
#Frame3D_0
#Text_0
#WindowName
#WindowText
#Text_1
#FinalMessage
#Text_2
#ListIcon_Actions
#Frame3D_1
#AddFile
#DeleteFile
#CreateDir
#IconFile
#Text_3
#LoadIconFile
#Frame3D_3
#Text_5
#OutputFile
#LoadExe
#GenerateInstaller
#Frame3D_4
#Text_6
#MainDir
#SVM_LOGO
#Text
#Frame3D_5
#Text_7
#InstallPath
#OpenRequester
#Install
#Exit
#ProgressBar
#help
#ende
#W1Btn3
#Text_8
#Text_9
#Text_10
#Text_11
EndEnumeration
Global Image
Image = CatchImage(0, ?Image)
Procedure Open_Window_Installer()
If OpenWindow(#Window_0, 216, 0, 600, 370, #PB_Window_SystemMenu |#PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "ScriptVM Installationswerkzeug - Installer tool by c) Balrog Software ")
If CreateGadgetList(WindowID())
Frame3DGadget(#Frame3D_0, 5, 5, 235, 125, "Konfiguriere Informationen")
TextGadget(#Text_0, 15, 30, 70, 15, "Anw.name")
StringGadget(#WindowName, 90, 25, 140, 20, "Anwendungsname")
StringGadget(#WindowText, 90, 50, 140, 20, "Fenstertext")
TextGadget(#Text_1, 15, 55, 70, 15, "Fenstertext")
StringGadget(#FinalMessage, 90, 75, 140, 20, "") ;Installtext eingeben
TextGadget(#Text_2, 15, 80, 70, 15, "Installtext:")
StringGadget(#IconFile, 90, 100, 115, 20, "") ;Hier wird Pfad von Iconfile eingefügt
TextGadget(#Text_3, 15, 105, 65, 15, "Icon dazu:")
ButtonGadget(#LoadIconFile, 210, 100, 20, 20, "...");Dateiwahl Iconfile
ListIconGadget(#ListIcon_Actions, 255, 25, 310, 100, "Aktion", 70)
AddGadgetColumn(#ListIcon_Actions, 2, "Dateiname", 100)
AddGadgetColumn(#ListIcon_Actions, 3, "Zielort", 150)
Frame3DGadget(#Frame3D_1, 245, 5, 350, 225, "Installer Aktionen")
ButtonGadget(#AddFile, 255, 130, 105, 20, "Dateien hinzufügen")
ButtonGadget(#DeleteFile, 365, 130, 90, 20, "Lösche Eingabe")
ButtonGadget(#CreateDir, 460, 130, 105, 20, "Erstelle Verzeichnis")
TextGadget(#Text_6, 270, 160, 130, 15, "Eingabe Laufwerkname:")
TextGadget(#Text_9, 255, 180, 330, 15, "1.Gib hier zuerst einen Laufwerksbuchstaben c:\, d:\, e:\ oder so ein.")
TextGadget(#Text_10, 255, 195, 330, 15, "2. Wähle dann den ' Erstelle Verzeichnis '-Knopf.")
TextGadget(#Text_11, 255, 210, 330, 15, "3. Gehe anschließend auf ' Dateien hinzufügen!'.")
StringGadget(#MainDir, 395, 155, 30, 20, "") ;Feld für Laufwerksname
;Hier sind wir dran
Frame3DGadget(#Frame3D_3, 245, 245, 350, 70, "Installer herstellen")
TextGadget(#Text_5, 290, 265, 190, 15, "exe-Ausgabedatei:")
StringGadget(#OutputFile, 385, 260, 170, 20, "") ;Feld für exe-Name
ButtonGadget(#LoadExe, 565, 260, 20, 20, "...");Dateiwahl für exe-Name
ButtonGadget(#GenerateInstaller, 255, 285, 120, 20, "Stelle den Installer her")
ProgressBarGadget(#ProgressBar, 385, 285, 170, 20, 0, 100)
Frame3DGadget(#Frame3D_4, 5, 135, 235, 190, "Installer - Ausgabe Ansicht - noch funktionslos")
ImageGadget(#SVM_LOGO, 17, 150, 32, 32, Image)
TextGadget(#Text, 52, 150, 175, 100, "Hier erscheint der Fenstertext", #PB_Text_Center)
Frame3DGadget(#Frame3D_5, 10, 255, 226, 65, "Name der Anwendung")
TextGadget(#Text_7, 15, 275, 55, 20, "Install-Pfad:")
StringGadget(#InstallPath, 80, 270, 120, 0, "",#PB_String_ReadOnly)
ButtonGadget(#OpenRequester, 208, 270, 20, 20, "...");Wahlknopf für Installpfad - noch funktionslos
ButtonGadget(#Install,27, 295, 90, 20, "Installiere in:")
ButtonGadget(#Exit, 127, 295, 90, 20, "Exit")
ButtonGadget(#W1Btn3,290,320,90,25,"about")
ButtonGadget(#help,390,320,90,25,"Hilfe")
ButtonGadget(#ende,490,320,90,25,"ENDE")
TextGadget(#Text_8, 100, 350, 410, 15, "Ins Deutsche übertragen von c) Robert Böhler; 78713 Schramberg; roboehler@web.de")
EndIf
EndIf
EndProcedure
DataSection:
Image:
IncludeBinary "L:\purebasic392\rbs2.ico"
EndDataSection
Open_Window_Installer()
;WindowName.s="Application Name"
;WindowText.s="Window Text"
WindowName.s="Anwendungsname"
WindowText.s="Fenstertext"
NewList InstallerScript.s()
NewList InstallerFile.s()
Repeat
Event = WaitWindowEvent()
If Event = #PB_EventGadget
GadgetID = EventGadgetID()
If GadgetID = #WindowName
WindowName.s=GetGadgetText(#WindowName)
SetGadgetText(#Frame3D_5,WindowName)
ElseIf GadgetID = #WindowText
WindowText.s=GetGadgetText(#WindowText)
SetGadgetText(#Text,WindowText)
ElseIf GadgetID = #FinalMessage
FinalMessage.s=GetGadgetText(#FinalMessage)
ElseIf GadgetID = #ListIcon_Actions
ItemNb=CountGadgetItems(#ListIcon_Actions)
For It=1 To ItemNb
If GetGadgetItemState(#ListIcon_Actions, It)=#PB_ListIcon_Selected
ItemSelected=It
EndIf
Next It
ElseIf GadgetID = #AddFile
If Len(ProgramDir.s)>1
NewFile.s=OpenFileRequester("Lade Dateiname", "","",0,#PB_Requester_MultiSelection)
If NewFile
AddGadgetItem(#ListIcon_Actions,-1,"INSTALL"+Chr(10)+GetFilePart(NewFile)+Chr(10)+"{PATH}\"+ProgramDir.s+Dir.s+GetFilePart(NewFile)+Chr(10))
LastElement(InstallerScript())
LastElement(InstallerFile())
AddElement(InstallerScript())
AddElement(InstallerFile())
InstallerScript()="INSTALL|"+GetFilePart(NewFile)+"|"+Dir.s
InstallerFile()=NewFile
Repeat
NewFile.s=NextSelectedFileName()
If NewFile
AddGadgetItem(#ListIcon_Actions,-1,"INSTALL"+Chr(10)+GetFilePart(NewFile)+Chr(10)+"{PATH}\"+ProgramDir.s+Dir.s+GetFilePart(NewFile)+Chr(10))
LastElement(InstallerScript())
LastElement(InstallerFile())
AddElement(InstallerScript())
AddElement(InstallerFile())
InstallerScript()="INSTALL|"+GetFilePart(NewFile)+"|"+Dir.s
InstallerFile()=NewFile
EndIf
Until Len(NewFile)=0
EndIf
Else
MessageBox_(0,"Gib zuerst einen Laufwerksnamen und danach einen Verzeichnisnamen ein","Error",#MB_ICONWARNING)
EndIf
ElseIf GadgetID = #DeleteFile
RemoveGadgetItem(#ListIcon_Actions, ItemSelected)
SelectElement(InstallerScript(), ItemSelected)
SelectElement(InstallerFile(), ItemSelected)
DeleteElement(InstallerScript())
DeleteElement(InstallerFile())
ElseIf GadgetID = #CreateDir
Dir.s=InputRequester("Verzeichnis erstellen","Gib hier den Verzeichnisnamen ein - ohne c:\ oder d:\ usw...","")
If Left(Dir.s,1)="\" : Dir.s=Right(Dir.s,Len(Dir.s)-1) : EndIf
If Right(Dir.s,1)<>"\" : Dir.s+"\" : EndIf
AddGadgetItem(#ListIcon_Actions,-1,"MAKEDIR"+Chr(10)+""+Chr(10)+"{PATH}\"+ProgramDir+Dir+Chr(10))
LastElement(InstallerScript())
LastElement(InstallerFile())
AddElement(InstallerScript())
AddElement(InstallerFile())
InstallerScript()="MAKEDIR|"+Dir.s
InstallerFile()="{DIR}"
;eingefügt
;ende der Einfügung
ElseIf GadgetID = #IconFile
IconFile.s=GetGadgetText(#IconFile)
ElseIf GadgetID = #LoadIconFile
IconFile.s=OpenFileRequester("Lade eine Icondatei of 32x32", "","icon file format|*.ico",0)
SetGadgetText(#IconFile,IconFile)
LoadImage(1,IconFile)
SetGadgetState(#SVM_LOGO, UseImage(1))
ElseIf GadgetID = #OutputFile
OutputFile.s=GetGadgetText(#OutputFile)
ElseIf GadgetID = #LoadExe
OutputFile.s=SaveFileRequester("Geben Sie den Namen für die Install-exe ein", "","executable format|*.exe",0)
If UCase(GetExtensionPart(OutputFile.s))<>"EXE"
OutputFile.s+".exe"
EndIf
SetGadgetText(#OutputFile, OutputFile.s)
ElseIf GadgetID = #GenerateInstaller
ItemNb=CountList(InstallerScript())
CountFiles=0
For It=0 To ItemNb-1
SelectElement(InstallerScript(),It)
If StringField(InstallerScript(),1,"|")="INSTALL"
CountFiles+1
EndIf
Next It
SetGadgetState(#ProgressBar,0)
If CreatePack("tmp.pak")
For It=0 To ItemNb-1
SelectElement(InstallerFile(),It)
AddPackFile(InstallerFile(),9)
percent.f=((It+1)/(ItemNb))*100
SetGadgetState(#ProgressBar, percent.f)
Next It
ClosePack()
EndIf
If CreateFile(0,"InstallerActions.txt")
WriteStringN(WindowName)
WriteStringN(WindowText)
WriteStringN(FinalMessage)
;eingefügt
WriteStringN(InstallPath.s)
;ende einfügung
WriteStringN(ProgramDir.s)
For It=0 To ItemNb-1
SelectElement(InstallerScript(),It)
WriteStringN(InstallerScript())
Next It
CloseFile(0)
EndIf
If ReadFile(0,"tmp.pak")
lenpack = Lof()
If lenpack>0
*mempack = AllocateMemory(lenpack)
ReadData(*mempack, lenpack)
EndIf
CloseFile(0)
EndIf
If ReadFile(0,"InstallerActions.txt")
leninstall = Lof()
If leninstall>0
*meminstall = AllocateMemory(leninstall)
ReadData(*meminstall, leninstall)
EndIf
CloseFile(0)
EndIf
If ReadFile(0,IconFile.s)
lenicon = Lof()
If lenicon>0
*memicon = AllocateMemory(lenicon)
ReadData(*memicon, lenicon)
EndIf
CloseFile(0)
EndIf
If lenpack>0 And leninstall>0 And lenicon>0 And Len(FinalMessage.s)>0
;Create the installer program with attatched pack archive.
If CreateFile(0, OutputFile)
WriteData(?filestart, ?fileend-?filestart)
WriteData(*mempack, lenpack)
WriteData(*meminstall, leninstall)
WriteData(*memicon, lenicon)
WriteLong(lenpack)
WriteLong(leninstall)
WriteLong(lenicon)
CloseFile(0)
MessageBox_(0,"Die Installer-Exe wurde erstellt","Installer",#MB_ICONEXCLAMATION)
EndIf
Else
MessageBox_(0,"Konnte die Install-Komponenten nicht erstellen","Error",#MB_ICONWARNING)
EndIf
FreeMemory(*mempack)
FreeMemory(*meminstall)
FreeMemory(*memicon)
DeleteFile("tmp.pak")
;DeleteFile("InstallerActions.txt")
ElseIf GadgetID = #MainDir
ProgramDir.s=GetGadgetText(#MainDir)
If Right(ProgramDir.s,1)<>"\" : ProgramDir.s+"\" : EndIf
EndIf
If GadgetID = #W1Btn3 ;----------Code zurück
MessageRequester("INFO ","Install-Programm von c) BalrogSoftware"+Chr(13)+"Leicht verändert und übertragen ins Deutsche"+Chr(13)+"von ' Robert Böhler '"+Chr(13)+" Leibbrandstr.8"+Chr(13)+"D 78713 Schramberg"+Chr(13)+"Tel.:07422/23668"+Chr(13)+"E-Mail: roboehler@gmx.de"+Chr(13)+" roboehler@web.de"+Chr(13)+" made with Purebasic 3.92"+Chr(13),0)
EndIf
If GadgetID = #help ;----------Code zurück
;+ Chr(10)oder Chr(13) ; Chr(10) wird nur für den Zeilenumbruch benötigt
MessageRequester("Hilfe zum Balrog Installer Tool","1.Gib in das leere Feld bei << Laufwerkname >> zuerst einen Laufwerksbuchstaben c:\, d:\, e:\ "+Chr(10)+" oder so ein."+Chr(10)+"2. Wähle dann den ' Erstelle Verzeichnis '-Knopf und gib einen Verzeichnisnamen ein."+Chr(10)+"3. Gehe auf ' Dateien hinzufügen.' Wähle im Dateiwahlfenster ein Verzeichnis aus, das gepackt"+Chr(10)+" werden soll. Klicke das Verzeichnis an und markiere die Dateien. Mit Linksklick auf den Button"+Chr(10)+" ' öffnen ' werden die gewählten Dateien ins Fenster 'Installer-Aktionen' übernommen."+Chr(10)+"4. Im Feld 'Konfiguriere Aktionen' tragen wir nun den Namen unseres 'Programms' ein.Im Fenstertext"+Chr(10)+" und im Installtext werden wichtige Informationen zum Programm und zu der Installation vermerkt."+Chr(10)+" Hier kann auch ein eigenes Icon beigefügt werden."+Chr(13)+"5. In der ' Ausgabe Installer Ansicht' erscheint der oben eingegebene Fenstertext."+Chr(10)+"6. Installer herstellen: Wir drücken auf den Button neben dem leeren Feld bei exe-Ausgabedatei."+Chr(10)+" Im Dateiwahlpopup geben wir einen Namen für die zu erstellende Install-Exe ein!"+Chr(10)+"7. Letzter Schritt: Wir drücken auf den Knopf ' Stelle den Installer her ' und eine gepackte Install.exe"+Chr(10)+" mit dem von uns gewählten exe-Namen wird erzeugt."+Chr(10)+Chr(10)+" Hilfe verfasst von c) Robert Böhler - 2005 - ",0)
EndIf
If GadgetID = #ende
;----------Code; the user click the button
Quit=1
EndIf
EndIf
Until Quit=1 Or Event = #PB_EventCloseWindow
End
;Include the extraction program
filestart:
IncludeBinary "L:\purebasic392\install1.exe"
fileend: