Мне кажется, это сделать нереально. Артикулом может быть любой набор букв и цифр. Общего правила кодирования нет.
Единственным выходом вижу иметь базу данных артикулов и по ней сверяться.
Можно сделать логирование работы в файл, и исходя из этого найти место падения программы. Затем проанализировать код и попробовать его исправить.
Можно попробовать запустить программу (release версию) из отладчика gdb и снять дамп памяти для последующего анализа или сделать так
Вижу 2 варианта:
1. Отнаследоваться от MaskedTextBox и реализовать свою логику на основе этого контрола.
2. Рисовать свой контрол и реализовывать всю логику работы вручную (будет сильно труднее, чем первый вариант).
По завершению времени жизни объекта кидайте событие, по которому удаляйте объект из коллекции. Удалением объекта из памяти займется GC в соответствии со своими алгоритмами.
Можно запихнуть в ресурсы вашего exe файла, затем при первом запуске распоковывать файл рядом с вашей программой. Но так практически никто не делает, а антивирусы не любят такую автивность. Правильным решением будет создание инсталлятора для вашей программы, который будет включать помимо вашего exe файла файл PsExec со всеми необходимыми ему библиотеками.
Ну, а выше, как вариант, Василий Банников предложил работающий вариант без создания инсталлятора.