Я полагаю, Crystal устанавливается в GAC.
Поэтому вам нужно программно просмотреть глобальный кэш сборок и найти там сборку Crystal
GAC может программно управляться через Windows API.
Здесь вы найдете простую оболочку, которая позволяет управлять GAC из управляемого кода
Но я бы не советовал вам идти по этому пути. :)
Хорошим решением, как правило, является также проверка всех необходимых сборок во время установки программного обеспечения, я полагаю, что установщик Windows имеет функции для проверки сборок
Однако, это не всегда нормально.
Предположим, вы хотите, чтобы пользователи запускали вашу программу даже без Crystal, но не разрешаете показывать отчеты, если Crystal не установлен.
В этом случае вам следует отделить все функциональные возможности отчетов от других форм. Вам следует создать отдельный проект с функциональностью Crystal Reports, назовем его MyReports. Только этот проект должен ссылаться на сборки Crystal, а другой - нет. Другие проекты также не должны напрямую ссылаться на MyReports.
И, наконец, вы должны использовать отражение для вызова средства просмотра отчетов, которое реализовано в MyReports из других проектов.
Обычно вы будете писать try / catch вокруг процедуры, в которой вы будете использовать отражение для загрузки сборки MyReports из файла. Таким образом, если Crystal или что-то еще не существует, он выдаст исключение, вы отобразите его пользователю, но остальные части программы будут работать.
Также вы можете прочитать о Внедрении зависимостей шаблон проектирования, он помогает справиться с такими проблемами.