In the code for ShutdownPE, arch is set to x86|x64, so it should not matter if it is x86 or x64. Also the zip has x86 and x64 versions of ShutdownPE.exe
Code for arch_check:
[Arch_check] If,#1,Equal,,Echo,"Using Arch YOU MUST DEFINE Architecture supported by script. Parameter missing",WARN If,#1,Equal,,Exit,"Using Arch YOU MUST DEFINE Architecture supported by script. Parameter missing"If,#1,Equal,,Set,%arch%,x86 If,#1,Equal,off,Set,%arch%,%SourceArch% StrFormat,POS,%arch%,|,%multiarch% If,%multiarch%,Equal,0,Begin If,Not,EXISTVAR,%TargetWOW64%,Set,%TargetWOW64%,%SourceArch% If,%arch%,Equal,x86,If,Not,%TargetWOW64%,Equal,x86,Exit,"%ProgramTitle% requires WOW64 for PE %SourceArch%" If,%arch%,Equal,x64,If,Not,%SourceArch%,Equal,x64,Exit,"%ProgramTitle% can only run on PE x64" If,%arch%,Equal,IA64,If,Not,%SourceArch%,Equal,IA64,Exit,"%ProgramTitle% can only run on PE IA64" End Else,Begin StrFormat,POS,%arch%,%SourceArch%,%multiarch_test% If,%multiarch_test%,Equal,0,Exit,"%ProgramTitle% requires different source architecture than current %SourceArch%" End Set,%arch%,%arch%,GLOBAL
From what I can see %arch% is not set before the StrFormat so shouldn't that line read:
StrFormat,POS,#1,|,%multiarch%
I also don't see where %arch% is being set for the if statements below the StrFormat command.