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

[K]DEFINE CLASS[/K] zipEvents [K]AS SESSION OLEPUBLIC[/K]
[K]IMPLEMENTS[/K] _IChilkatZipEvents [K]IN[/K] "Chilkat.Zip"

[K]PROCEDURE[/K] _IChilkatZipEvents_AbortCheck(abort [K]As[/K] [K]Number[/K])
    [C]* Application code goes here...[/C]
    
[K]ENDPROC[/K]

[K]PROCEDURE[/K] _IChilkatZipEvents_AddFilesBegin
    [C]* Application code goes here...[/C]
[K]ENDPROC[/K]

[K]PROCEDURE[/K] _IChilkatZipEvents_AddFilesEnd
    [C]* Application code goes here...[/C]
[K]ENDPROC[/K]

[K]PROCEDURE[/K] _IChilkatZipEvents_BinaryData(data [K]As[/K] [K]Variant[/K])
    [C]* Application code goes here...[/C]

[K]ENDPROC[/K]

[K]PROCEDURE[/K] _IChilkatZipEvents_DirToBeAdded(path [K]As[/K] [K]String[/K], nSkip [K]As[/K] [K]Number[/K])
    [C]* Application code goes here...[/C]
[K]ENDPROC[/K]

[K]PROCEDURE[/K] _IChilkatZipEvents_FileAdded(path [K]As[/K] [K]String[/K], fileSize [K]As[/K] [K]Number[/K], abort [K]As[/K] [K]Number[/K])
    [C]* Application code goes here...[/C]
[K]ENDPROC[/K]

[K]PROCEDURE[/K] _IChilkatZipEvents_FileUnzipped(path [K]As[/K] [K]String[/K], compressedSize [K]As[/K] [K]Number[/K], fileSize [K]As[/K] [K]Number[/K], abort [K]As[/K] [K]Number[/K])
    [C]* Application code goes here...[/C]
[K]ENDPROC[/K]

[K]PROCEDURE[/K] _IChilkatZipEvents_FileZipped(path [K]As[/K] [K]String[/K], fileSize [K]As[/K] [K]Number[/K], compressedSize [K]As[/K] [K]Number[/K], abort [K]As[/K] [K]Number[/K])
    [C]* Application code goes here...[/C]
[K]ENDPROC[/K]

[K]PROCEDURE[/K] _IChilkatZipEvents_PercentDone(pctDone [K]As[/K] [K]Number[/K], abort [K]As[/K] [K]Number[/K])
    [C]* Application code goes here...[/C]
    ? "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
[K]ENDPROC[/K]

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

[K]PROCEDURE[/K] _IChilkatZipEvents_SkippedForUnzip(path [K]As[/K] [K]String[/K], compressedSize [K]As[/K] [K]Number[/K], fileSize [K]As[/K] [K]Number[/K], isDirectory [K]As[/K] [K]Number[/K])
    [C]* Application code goes here...[/C]
[K]ENDPROC[/K]

[K]PROCEDURE[/K] _IChilkatZipEvents_TaskCompleted(task [K]As[/K] [K]Generic[/K])
    [C]* Application code goes here...[/C]

[K]ENDPROC[/K]

[K]PROCEDURE[/K] _IChilkatZipEvents_TextData(data [K]As[/K] [K]String[/K])
    [C]* Application code goes here...[/C]

[K]ENDPROC[/K]

[K]PROCEDURE[/K] _IChilkatZipEvents_ToBeAdded(path [K]As[/K] [K]String[/K], fileSize [K]As[/K] [K]Number[/K], nSkip [K]As[/K] [K]Number[/K])
    [C]* Application code goes here...[/C]
[K]ENDPROC[/K]

[K]PROCEDURE[/K] _IChilkatZipEvents_ToBeUnzipped(path [K]As[/K] [K]String[/K], compressedSize [K]As[/K] [K]Number[/K], fileSize [K]As[/K] [K]Number[/K], nSkip [K]As[/K] [K]Number[/K])
    [C]* Application code goes here...[/C]
[K]ENDPROC[/K]

[K]PROCEDURE[/K] _IChilkatZipEvents_ToBeZipped(path [K]As[/K] [K]String[/K], fileSize [K]As[/K] [K]Number[/K], nSkip [K]As[/K] [K]Number[/K])
    [C]* Application code goes here...[/C]
[K]ENDPROC[/K]

[K]PROCEDURE[/K] _IChilkatZipEvents_UnzipBegin
    [C]* Application code goes here...[/C]
[K]ENDPROC[/K]

[K]PROCEDURE[/K] _IChilkatZipEvents_UnzipEnd
    [C]* Application code goes here...[/C]
[K]ENDPROC[/K]

[K]PROCEDURE[/K] _IChilkatZipEvents_WriteZipBegin
    [C]* Application code goes here...[/C]
[K]ENDPROC[/K]

[K]PROCEDURE[/K] _IChilkatZipEvents_WriteZipEnd
    [C]* Application code goes here...[/C]
[K]ENDPROC[/K]


[K]ENDDEFINE[/K]