1. Лучше взять за правило исправить код. Даже если на 21 раз ошибка, очевидно, что она связана с изменением внешних условий. Например получал массив, а потому что данные всегда существовали, а так как вариант несуществования никогда не возникал, тут-то и зарыта ошибка. Сам через пол-года выявил такую в своей программе при пустой папке, когда анализ пустой папки бессмысленен, но бывает что пользователь не знает что папка пуста, а программа не должна от этого падать.
2. Так как вылет ошибки не подразумевает дальнейшую работу exe-файла, то я как бы не пытаюсь обмануть железную логику. Но можно используя тот же файл запустить второй процесс. То есть файл то один но работает он дважды. Первый запускает и переименовывает встроенное окно скрипта (AutoItWinSetTitle), второй процесс запускается из первого через AutoIt3ExecuteScript. Хотя нужно сохранить запускаемый скрипт в Temp-папке. И дальше второй процесс ловит окно ошибки и при успехе убивает окно и процесс, перезапуская exe-файл. Ну а первый процесс при наличии запущенного второго процесса не запускает его второй раз.