To plik exe będzie musiał mieć statycznie linkowane biblioteki Visual'a. Jak statycznie podlinkujesz jakiegoś liba do obsługi zip'ów to zawsze otrzymujesz jeden niezależny plik exe ;) - np. to http://www.sharewareconnection.com/chilkat-zip-compression-visual-c-library.htm
Ja ostatnio trochę się zajmowałem pakowaniem w Python'ie. Dzięki projektowi PyInstaller można wsadzić całego Python'a z użytymi bibliotekami i modułami w jeden plik *.exe. A pakowanie zipa jest bajecznie proste:
import zipfile
from StringIO import StringIO
zipstream=StringIO()
file_zip = zipfile.ZipFile(zipstream,"w")
file_zip.write("loader.exe","loader.exe")
file_zip.write("app_data/game.zip","app_data/game.zip")
file_zip.write("app_data/data.gz","app_data/data.gz")
file_zip.close()
zipstream.seek(0)
plik=file("gra.zip","wb")
while True:
buf=zipstream.read(2048)
if buf=="": break
plik.write(buf)
plik.close()
Skopiowane z mojego projektu, cały plik zip przed zapisem jest tworzony w pamięci, dopiero potem te dane są zapisywane na dysku. Można to zrealizować prościej, ale przedstawiony sposób będzie wymagał znacznie mniej zmian, kiedy będę go przerabiał do działania w Google App Engine. Zamiast zipstream możesz od razu podać nazwę pliku i wtedy wszystko z StringIO oraz linijki po file_zip.close() można będzie usunąć.