How to change the icon, version or another resource of Windows executables built with PAR::Packer
PAR::Packerto create a nice Windows executable out of one of your perl script.
--iconswitch aren't working. You might also want to embed some other resource into your executable.
Trying the usual methods
exe_update --icon=jambon.ico jambon.exe
exe_update does not work with PAR::Packer executable. It will destroy your file.
ResHacker.exe -modify "jambon.exe", "jambon.exe", "jambon.ico", ICONGROUP, WINEXE, 0
ResHacker.exe -delete "jambon.exe", "jambon.exe", versioninfo,1,
ResHacker.exe -addoverwrite "jambon.exe", "jambon.exe", "jambon\version_info.res", versioninfo,1,
ResHacker will edit the resource of your file correctly. However, the executable will error when launching since its signature has changed. This is not acceptable.
Where the icon and version comes from
When built statically, a pp compiled executable is made of data stored in
Static.pm, which is made from
boot.exe. This boot.exe file is the one that contains the final resources.
The resources used to build this file are located in
cpan\build\PAR-Packer-1.015-?????\myldr\winres. Modifying these files and rebuilding
boot.exewill allow you to change your final executable resources.
The ugly solution that works
Before packing your perl script, rebuild boot.exe with your custom information.
This can easily be automated using a makefile, like this one:
PERL_DIR = C:\StupidPrograms\strawberryperl\perl
PAR_PACKER_SRC = C:\StupidPrograms\strawberryperl\cpan\build\PAR-Packer-1.015-2TLZDS
copy /Y medias\jambon.ico $(PAR_PACKER_SRC)\myldr\winres\pp.ico
copy /Y medias\jambon.rc $(PAR_PACKER_SRC)\myldr\winres\pp.rc
cd /D $(PAR_PACKER_SRC)\myldr\ && perl Makefile.PL
cd /D $(PAR_PACKER_SRC)\myldr\ && dmake boot.exe
cd /D $(PAR_PACKER_SRC)\myldr\ && dmake Static.pm
attrib -R $(PERL_DIR)\site\lib\PAR\StrippedPARL\Static.pm
copy /Y $(PAR_PACKER_SRC)\myldr\Static.pm $(PERL_DIR)\site\lib\PAR\StrippedPARL\Static.pm
pp -o jambon.exe -f PodStrip -f Bleach -f Obfuscate --compress=9 jambon.pl
Your perl installation might be different than mine, so you'll want to adapt the scripts.
This solution is quite ugly, but it does work.