Sample code for 30+ languages & platforms
C#

Create Self-Extracting Executable (Windows-only)

Demonstrates how to create a Windows self-extracting EXE.

Chilkat C# Downloads

C#
// AbortCheck callback method.
private void zip_OnAbortCheck(object sender, Chilkat.AbortCheckEventArgs args)
    {
    
    }

// PercentDone callback method.
private void zip_OnPercentDone(object sender, Chilkat.PercentDoneEventArgs args)
    {
    int percentDone = args.PercentDone;
    Debug.WriteLine("Percent Done: " + Convert.ToString(percentDone));
    // Explicitly abort at 25% or greater.
    // Remove this to allow for the HTTP download to run to completion.
    if (percentDone > 25) {
        args.Abort = true;
    }
    }

// ProgressInfo callback method.
private void zip_OnProgressInfo(object sender, Chilkat.ProgressInfoEventArgs args)
    {
    string name = args.Name;
    string value = args.Value;
    Debug.WriteLine(name + ": " + value);
    }

private void ChilkatExample()
    {
    bool success = false;

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

    Chilkat.Zip zip = new Chilkat.Zip();
    zip.OnAbortCheck += zip_OnAbortCheck;
    zip.OnPercentDone += zip_OnPercentDone;
    zip.OnProgressInfo += zip_OnProgressInfo;

    // 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 = zip.NewZip("notUsed.zip");
    if (success != true) {
        Debug.WriteLine(zip.LastErrorText);
        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.
    bool recurse = true;
    zip.AppendFiles("c:/temp/a/*",recurse);

    // Write "sfx.exe"
    success = zip.WriteExe("c:/temp/sfx.exe");
    if (success != true) {
        Debug.WriteLine(zip.LastErrorText);
        return;
    }

    }