Sample code for 30+ languages & platforms
Visual FoxPro

Create Self-Extracting Executable (Windows-only)

Demonstrates how to create a Windows self-extracting EXE.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loZip
LOCAL lnRecurse

lnSuccess = 0

* This example requires the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.

loZip = CreateObject('Chilkat.Zip')
zipEventHandler = CreateObject("zipEvents")
EventHandler(loZip,zipEventHandler)

* Initialize the zip object.  Because we're creating
* a self-extracting EXE in this example, the filename
* passed to NewZip will never actually be created.
lnSuccess = loZip.NewZip("notUsed.zip")
IF (lnSuccess <> 1) THEN
    ? loZip.LastErrorText
    RELEASE loZip
    CANCEL
ENDIF

* Append a directory tree.  The AppendFiles does
* not read the file contents or append them to the zip
* object in memory.  It simply appends references
* to the files so that when WriteExe (or WriteZipAndClose,
* or WriteZip, etc.) is called, the files are compressed
* and added to the archive.
lnRecurse = 1
loZip.AppendFiles("c:/temp/a/*",lnRecurse)

* Write "sfx.exe"
lnSuccess = loZip.WriteExe("c:/temp/sfx.exe")
IF (lnSuccess <> 1) THEN
    ? loZip.LastErrorText
    RELEASE loZip
    CANCEL
ENDIF

RELEASE loZip

DEFINE CLASS zipEvents AS SESSION OLEPUBLIC
IMPLEMENTS _IChilkatZipEvents IN "Chilkat.Zip"

PROCEDURE _IChilkatZipEvents_AbortCheck(abort As Number)
    * Application code goes here...
    
ENDPROC

PROCEDURE _IChilkatZipEvents_AddFilesBegin
    * Application code goes here...
ENDPROC

PROCEDURE _IChilkatZipEvents_AddFilesEnd
    * Application code goes here...
ENDPROC

PROCEDURE _IChilkatZipEvents_BinaryData(data As Variant)
    * Application code goes here...

ENDPROC

PROCEDURE _IChilkatZipEvents_DirToBeAdded(path As String, nSkip As Number)
    * Application code goes here...
ENDPROC

PROCEDURE _IChilkatZipEvents_FileAdded(path As String, fileSize As Number, abort As Number)
    * Application code goes here...
ENDPROC

PROCEDURE _IChilkatZipEvents_FileUnzipped(path As String, compressedSize As Number, fileSize As Number, abort As Number)
    * Application code goes here...
ENDPROC

PROCEDURE _IChilkatZipEvents_FileZipped(path As String, fileSize As Number, compressedSize As Number, abort As Number)
    * Application code goes here...
ENDPROC

PROCEDURE _IChilkatZipEvents_PercentDone(pctDone As Number, abort As Number)
    * Application code goes here...
    ? "Percent Done: " + STR(pctDone)
    * Explicitly abort at 25% or greater.
    * Remove this to allow for the HTTP download to run to completion.
    IF (pctDone > 25) THEN
        abort = 1
    ENDIF
ENDPROC

PROCEDURE _IChilkatZipEvents_ProgressInfo(name As String, value As String)
    * Application code goes here...
    ? name + ": " + value
ENDPROC

PROCEDURE _IChilkatZipEvents_SkippedForUnzip(path As String, compressedSize As Number, fileSize As Number, isDirectory As Number)
    * Application code goes here...
ENDPROC

PROCEDURE _IChilkatZipEvents_TaskCompleted(task As Generic)
    * Application code goes here...

ENDPROC

PROCEDURE _IChilkatZipEvents_TextData(data As String)
    * Application code goes here...

ENDPROC

PROCEDURE _IChilkatZipEvents_ToBeAdded(path As String, fileSize As Number, nSkip As Number)
    * Application code goes here...
ENDPROC

PROCEDURE _IChilkatZipEvents_ToBeUnzipped(path As String, compressedSize As Number, fileSize As Number, nSkip As Number)
    * Application code goes here...
ENDPROC

PROCEDURE _IChilkatZipEvents_ToBeZipped(path As String, fileSize As Number, nSkip As Number)
    * Application code goes here...
ENDPROC

PROCEDURE _IChilkatZipEvents_UnzipBegin
    * Application code goes here...
ENDPROC

PROCEDURE _IChilkatZipEvents_UnzipEnd
    * Application code goes here...
ENDPROC

PROCEDURE _IChilkatZipEvents_WriteZipBegin
    * Application code goes here...
ENDPROC

PROCEDURE _IChilkatZipEvents_WriteZipEnd
    * Application code goes here...
ENDPROC


ENDDEFINE