2009-06-16 2 views
0

Я создал класс, который создает отчет Crystal и отображает его в средстве просмотра отчетов.В .NET, как я могу определить, установлен ли у пользователя определенный распространяемый дистрибутив?

Однако, без Кристаллического Распространяемого, код падает. Как я могу программно определить, установлен ли у конечного пользователя Crystal DLL?

Код я обязан включить это:

Imports CrystalDecisions.CrystalReports.Engine 
Imports CrystalDecisions.Shared 

ответ

1

Я полагаю, Кристалл устанавливается в GAC. Итак, вам нужно программно просматривать глобальный кеш сборки и искать там сборку кристалла

GAC можно программно управлять через Windows API. Here you will find простая оболочка, которая позволяет управлять GAC из управляемого кода

Но я бы не рекомендовал вам идти этим путем. :)

Хорошее решение, как правило, слишком проверить для всех необходимых сборок во время установки программного обеспечения, я полагаю, установщик Windows имеет функции для проверки для сборок

Однако, это не всегда в порядке. Предположим, если вы хотите, чтобы пользователи запускали вашу программу даже без Crystal, но не разрешайте показать отчеты, если Crystal не установлен.

В этом случае вы должны отделить все функции отчетов от других форм. Вы должны создать отдельный проект с функциями Crystal Reports, назовем его MyReports. Только этот проект должен ссылаться на сборки Crystal, в то время как другие не должны. Другие проекты также не должны напрямую ссылаться на MyReports.

И, наконец, вы должны использовать отражение, чтобы вызвать средство просмотра отчетов, которое реализовано внутри MyReports из других проектов.

Обычно вы будете писать try/catch вокруг процедуры, в которой вы будете использовать отражение, чтобы загрузить сборку MyReports из файла. Итак, если Crystal или что-то еще не существует, он будет генерировать исключение, вы покажете его пользователю, но другие части программы будут работать.

Кроме того, вы можете прочитать о Зависимость впрыска шаблон дизайна, он помогает справляться с такими проблемами.

1

В идеале, вы должны заботиться о всех зависимостей приложения во время установки и убедитесь, что все необходимые компоненты уже установлены. Однако вы можете обернуть свой код, который вызывает вызовы для DLL в вопросе в блоке try..catch и поймать исключение DllNotFoundException, когда оно будет запущено.

0

Вы можете узнать эти данные, зайдя в реестр. Я буду искать и предоставлять обновления.

Редактировать: вы также можете включить отчеты Crystal в качестве предварительного условия в пакете развертывания. Затем вы можете быть уверены, что у конечного пользователя есть библиотека.

0

Используйте merge module с настройками. Sap есть список здесь:

Merge modules

+0

Ссылка не удалена –

+0

Привет, Jon, ссылка не сломана - у SO есть ошибка. Попробуйте это http://tinyurl.com/b44zl8 – RichardOD

1

Вы можете проверить, если следующий раздел реестра

HKEY_CURRENT_USER\Software\Crystal Decisions 

Это скажет вам, если установлен отчеты хрустальные. если вы хотите проверить определенную версию, проверьте дочерний ключ. Например, отчеты о кристаллах, установленные с Visual Studio 2008, - 10,2