Sample code for 30+ languages & platforms
.NET Core C#

Create Self-Extracting Executable (Windows-only)

Demonstrates how to create a Windows self-extracting EXE.

Chilkat .NET Core C# Downloads

.NET Core C#
// AbortCheck callback method.
public void handleAbortCheck(out bool abort)
    {
    // Application code goes here.
    }

// PercentDone callback method.
public void handlePercentDone(int pctDone, out bool abort)
    {
    // Application code goes here.
    }

// ProgressInfo callback method.
public void handleProgressInfo(string name, string value)
    {
    // Application code goes here.
    }

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();

    Chilkat.Zip.AbortCheck abortCheck = new Chilkat.Zip.AbortCheck(handleAbortCheck);
    zip.setAbortCheckCb(abortCheck);

    Chilkat.Zip.PercentDone percentDone = new Chilkat.Zip.PercentDone(handlePercentDone);
    zip.setPercentDoneCb(percentDone);

    Chilkat.Zip.ProgressInfo progressInfo = new Chilkat.Zip.ProgressInfo(handleProgressInfo);
    zip.setProgressInfoCb(progressInfo);

    // 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;
    }

    }