Unicode C++
Unicode C++
Create Self-Extracting Executable (Windows-only)
Demonstrates how to create a Windows self-extracting EXE.Chilkat Unicode C++ Downloads
#include <CkZipW.h>
#include <CkZipProgressW.h>
class zipProgress : public CkZipProgressW {
public:
zipProgress() { }
virtual ~zipProgress() { }
void AbortCheck(bool *abort) {
// Application code goes here.
}
void PercentDone(int percentDone, bool *abort) {
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) {
*abort = true;
}
}
void ProgressInfo(const wchar_t *name, const wchar_t *value) {
wprintf(L"%s: %s\n",name,value);
}
};
void ChilkatSample(void)
{
bool success = false;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
CkZipW zip;
zipProgress zip_progress;
zip.put_EventCallbackObject(&zip_progress);
// 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(L"notUsed.zip");
if (success != true) {
wprintf(L"%s\n",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(L"c:/temp/a/*",recurse);
// Write "sfx.exe"
success = zip.WriteExe(L"c:/temp/sfx.exe");
if (success != true) {
wprintf(L"%s\n",zip.lastErrorText());
return;
}
}