Embedding icon in .exe with py2exe, visible in Vista?

Etienne Perot picture Etienne Perot · Feb 8, 2009 · Viewed 12.5k times · Source

I've been trying to embed an icon (.ico) into my "compyled" .exe with py2exe.

Py2Exe does have a way to embed an icon:

windows=[{
    'script':'MyScript.py',
    'icon_resources':[(1,'MyIcon.ico')]
}]

And that's what I am using. The icon shows up fine on Windows XP or lower, but doesn't show at all on Vista. I suppose this is because of the new Vista icon format, which can be in PNG format, up to 256x256 pixels.

So, how can I get py2exe to embed them into my executable, without breaking the icons on Windows XP?

I'm cool with doing it with an external utility rather than py2exe - I've tried this command-line utility to embed it, but it always corrupts my exe and truncates its size for some reason.

Answer

simplyharsh picture simplyharsh · Feb 8, 2009

Vista uses icons of high resolution 256x256 pixels images, they are stored using PNG-based compression. The problem is if you simply make the icon and save it in standard XP ICO format, the resulting file will be 400Kb on disk. The solution is to compress the images. The compression scheme used is PNG (Portable Network Graphic) because it has a good lossless ratio and supports alpha channel.

And use

png2ico myicon.ico logo16x16.png logo32x32.png logo255x255.png

It creates an ICO file from 1 or more PNG's and handles multiple sizes etc. And I guess XP would have no problem with that.