When I call WriteExe, the output .exe file is about 992 k, but when I call WriteZip the .zip file is 376 k. Why is the .exe larger?
The .exe created by WriteExe includes a constant amount of overhead, and this is for code that does the unzipping. Also, the .exe contains compressed charset data so that Unicode filenames may be unzipped properly regardless of the locale where the .exe runs. (Allowing for cases where a .exe created in Japan, for example, will unzip properly in Germany.)
The trade-off with the .exe is that for the extra few hundred KB’s you don’t need unzipping software and the files unzip properly for filenames in any language regardless of the locale of the computer and what code pages might be available.