Sample code for 30+ languages & platforms
Unicode C

Create Self-Extracting Executable (Windows-only)

Demonstrates how to create a Windows self-extracting EXE.

Chilkat Unicode C Downloads

Unicode C
#include <C_CkZipW.h>

BOOL zip_AbortCheck()
    {
    
    return FALSE;
    }

BOOL zip_PercentDone(int percentDone)
    {
    wprintf(L"Percent Done: %d\n",percentDone);
    //  Explicitly abort at 25% or greater.
    //  Remove this to allow for the HTTP download to run to completion.
    if (percentDone > 25) {
        return TRUE;
    }
    return FALSE;
    }

void zip_ProgressInfo(const wchar_t *name, const wchar_t *value)
    {
    wprintf(L"%s: %s\n",name,value);
    }

void ChilkatSample(void)
    {
    BOOL success;
    HCkZipW zip;
    BOOL (*fnzipAbortCheck)() = zip_AbortCheck;
    BOOL (*fnzipPercentDone)(int percentDone) = zip_PercentDone;
    void (*fnzipProgressInfo)(const wchar_t *name, const wchar_t *value) = zip_ProgressInfo;
    BOOL recurse;

    success = FALSE;

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

    zip = CkZipW_Create();
    CkZipW_setAbortCheck(zip, fnzipAbortCheck);
    CkZipW_setPercentDone(zip, fnzipPercentDone);
    CkZipW_setProgressInfo(zip, fnzipProgressInfo);

    //  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.
    success = CkZipW_NewZip(zip,L"notUsed.zip");
    if (success != TRUE) {
        wprintf(L"%s\n",CkZipW_lastErrorText(zip));
        CkZipW_Dispose(zip);
        return;
    }

    //  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.
    recurse = TRUE;
    CkZipW_AppendFiles(zip,L"c:/temp/a/*",recurse);

    //  Write "sfx.exe"
    success = CkZipW_WriteExe(zip,L"c:/temp/sfx.exe");
    if (success != TRUE) {
        wprintf(L"%s\n",CkZipW_lastErrorText(zip));
        CkZipW_Dispose(zip);
        return;
    }



    CkZipW_Dispose(zip);

    }