(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: