Das Problem liegt wohl darin, dass ShellExecute (ja das schreibt man so, in C/C++/C#/Java wärst du aufgeschmissen mit der Kleinschreibnung) keine
Exception wirft, wenn das Programm nicht gestartet wurde, sondern im Fehlerfall einen Wert kleiner als 32 zurückliefert, den du auswerten musst (mehr Infos siehe Win32API Hilfe). Das try/except ist hier also unnötig, da es hier nichts bringt.