compile as install.exe:
Code: Select all
; 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,"Can't create this file:"+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
#ProgressBar
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()
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, 138, #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, 30, WindowText.s, #PB_Text_Center)
Frame3DGadget(#Frame3D_0, 5, 40, 210, 95, WindowName.s)
TextGadget(#Text_3, 15, 65, 30, 15, "Path:")
StringGadget(#InstallPath, 45, 60, 135, 20, "",#PB_String_ReadOnly)
ButtonGadget(#OpenRequester, 185, 60, 20, 20, "...")
ButtonGadget(#Install, 15, 85, 90, 20, "Install")
ButtonGadget(#Exit, 115, 85, 90, 20, "Exit")
ProgressBarGadget(#ProgressBar, 15, 115, 190, 10, 0, 100)
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("A directory called '"+ProgramDir.s+"' will be created."+Chr(10)+Chr(10)+"Select a directory:","")
If Right(InstallDir.s,1)<>"\" : InstallDir+"\" : EndIf
If Len(InstallDir)>1
InstallDir.s+ProgramDir.s
Else
InstallDir.s=""
EndIf
SetGadgetText(#InstallPath,InstallDir.s)
EndIf
EndIf
Until Quit=1
FreeMemory(-1)
DeleteFile(tmpfilepack)
DeleteFile(tmpfileinstall)
DeleteFile(tmpfileicon)
End
Code: Select all
; 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
EndEnumeration
Global Image
Image = CatchImage(0, ?Image)
Procedure Open_Window_Installer()
If OpenWindow(#Window_0, 216, 0, 485, 271, #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "ScriptVM Installer Tool")
If CreateGadgetList(WindowID())
Frame3DGadget(#Frame3D_0, 5, 5, 235, 125, "Config information")
TextGadget(#Text_0, 15, 30, 70, 15, "App. name")
StringGadget(#WindowName, 90, 25, 140, 20, "Application Name")
StringGadget(#WindowText, 90, 50, 140, 20, "Window Text")
TextGadget(#Text_1, 15, 55, 70, 15, "Window text")
StringGadget(#FinalMessage, 90, 75, 140, 20, "")
TextGadget(#Text_2, 15, 80, 70, 15, "Final message")
StringGadget(#IconFile, 90, 100, 115, 20, "")
TextGadget(#Text_3, 15, 105, 65, 15, "Icon image:")
ButtonGadget(#LoadIconFile, 210, 100, 20, 20, "...")
ListIconGadget(#ListIcon_Actions, 255, 25, 215, 100, "Action", 70)
AddGadgetColumn(#ListIcon_Actions, 2, "File name", 100)
AddGadgetColumn(#ListIcon_Actions, 3, "Destination", 150)
Frame3DGadget(#Frame3D_1, 245, 5, 235, 180, "Installer actions")
ButtonGadget(#AddFile, 255, 130, 65, 20, "Add file")
ButtonGadget(#DeleteFile, 330, 130, 65, 20, "Delete entry")
ButtonGadget(#CreateDir, 405, 130, 65, 20, "Create dir")
TextGadget(#Text_6, 255, 160, 85, 15, "Program directory:")
StringGadget(#MainDir, 345, 155, 125, 20, "")
Frame3DGadget(#Frame3D_3, 245, 190, 235, 75, "Make Installer")
TextGadget(#Text_5, 255, 215, 55, 15, "Output file:")
StringGadget(#OutputFile, 310, 210, 135, 20, "")
ButtonGadget(#LoadExe, 450, 210, 20, 20, "...")
ButtonGadget(#GenerateInstaller, 255, 235, 110, 20, "Generate Installer")
ProgressBarGadget(#ProgressBar, 370, 235, 100, 20, 0, 100)
Frame3DGadget(#Frame3D_4, 5, 135, 235, 130, "Output installer view")
ImageGadget(#SVM_LOGO, 17, 150, 32, 32, Image)
TextGadget(#Text, 52, 150, 175, 30, "Window Text", #PB_Text_Center)
Frame3DGadget(#Frame3D_5, 17, 185, 210, 75, "Application Name")
TextGadget(#Text_7, 27, 215, 40, 15, "Path:")
StringGadget(#InstallPath, 57, 210, 135, 20, "",#PB_String_ReadOnly)
ButtonGadget(#OpenRequester, 197, 210, 20, 20, "...")
ButtonGadget(#Install,27, 235, 90, 20, "Install")
ButtonGadget(#Exit, 127, 235, 90, 20, "Exit")
EndIf
EndIf
EndProcedure
DataSection:
Image:
IncludeBinary "svm.ico"
EndDataSection
Open_Window_Installer()
WindowName.s="Application Name"
WindowText.s="Window Text"
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("Load filename", "","",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,"Set first a root program directory name","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("Create directory","Enter directory name","")
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}"
ElseIf GadgetID = #IconFile
IconFile.s=GetGadgetText(#IconFile)
ElseIf GadgetID = #LoadIconFile
IconFile.s=OpenFileRequester("Load icon file 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("Set output executable name", "","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)
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,"Installer executable was created","Installer",#MB_ICONEXCLAMATION)
EndIf
Else
MessageBox_(0,"Can't create install components","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
EndIf
Until Event = #PB_EventCloseWindow
End
;Include the extraction program
filestart:
IncludeBinary "install.exe"
fileend:
http://www.balrogsoftware.com/imagenes/svm.ico
I hope that it could help or interest to someone, bye.