Tja, die beste Möglichkeit die Exe klein zu bekommen dürfte wohl - wie bereits erwähnt - die Verwendung des .Net Frameworks sein.
UPX (und andere Exe-Packer) so kategorisch abzulehnen wie gotos (*hüstel*) halte ich für grundsätzlich falsch. Ich sehe ein dass es keinen sinn macht eine 100MB-Exe zu UPXen, bei einer 1MB-Exe dürfte das das Windows Speichermanagement aber heutzutage herzlich wenig stören
Bei verwendung von Zip o.ä. bleibt eben immer, dass man mitunter auch noch kostenpflichtige Zusatzsoftware braucht - bei .Net gewissermaßen zwar auch, aber das kostet nix und ist sowieso meistens vorinstalliert.
Ergo: -> .Net