2009-06-16 8 views
0

Ich habe eine Klasse erstellt, die einen Crystal Reports-Bericht erstellt und ihn in einer Berichtsanzeige anzeigt.In .NET, wie kann ich erkennen, ob ein Benutzer ein bestimmtes Redistributable installiert hat?

Ohne den Crystal Redistributable stürzt der Code jedoch ab. Wie kann ich programmatisch erkennen, ob der Endbenutzer die Crystal DLL installiert hat?

Der Code, den ich verpflichtet bin, enthalten ist:

Imports CrystalDecisions.CrystalReports.Engine 
Imports CrystalDecisions.Shared 

Antwort

1

Ich nehme an Crystal GAC installiert. Sie müssen also den globalen Assemblycache programmatisch durchsuchen und dort nach einer Crystal Assembly suchen.

GAC kann programmgesteuert über Windows API verwaltet werden. Here you will find ein einfacher Wrapper, der es ermöglicht, GAC von einem verwalteten Code zu verwalten

Aber ich würde nicht empfehlen, dass Sie diesen Weg gehen. :)

Die gute Lösung in der Regel auch während der Installation der Software für alle erforderlichen Baugruppen zu überprüfen, nehme ich an Windows Installer-Funktionen für Baugruppen

jedoch zu prüfen hat, ist es nicht immer in Ordnung ist. Angenommen, Sie möchten, dass Benutzer Ihr Programm auch ohne Crystal ausführen, aber keine Showberichte zulassen, wenn Crystal nicht installiert ist.

In diesem Fall sollten Sie alle Berichtsfunktionen von anderen Formularen entkoppeln. Sie sollten ein separates Projekt mit Crystal Reports-Funktionalität erstellen, nennen wir es MyReports. Nur dieses Projekt sollte auf Crystal-Assemblies verweisen, andere nicht. Andere Projekte sollten auch nicht direkt auf MyReports verweisen.

Und schließlich sollten Sie Reflection verwenden, um einen Report Viewer aufzurufen, der in MyReports aus anderen Projekten implementiert ist.

Normalerweise schreiben Sie try/catch um die Prozedur herum, in der Sie die MyReports-Assembly aus der Datei laden. Also, wenn Crystal oder etwas anderes nicht existiert, wird es eine Ausnahme auslösen, Sie werden es dem Benutzer anzeigen, aber die anderen Teile des Programms werden funktionieren.

Sie können auch über Dependency Injection Entwurfsmuster lesen, hilft es, solche Probleme zu verwalten.

1

Idealerweise Sie kümmern sich um alle Abhängigkeiten Ihrer Anwendung Zeit bei der Installation dauern würde, und stellen Sie sicher, dass die alle erforderlichen Komponenten sind bereits installiert. Sie können jedoch Ihren Code, der Aufrufe an die betreffenden DLLs in einem try..catch-Block ausführt, umbrechen und die DllNotFoundException abfangen, wenn sie ausgelöst wird.

0

Sie können diese Details durch einen Blick in die Registrierung herausfinden. Ich werde suchen und ein Update zur Verfügung stellen.

Bearbeiten: Sie können Crystal Reports auch als Voraussetzung in das Bereitstellungspaket aufnehmen. Sie können dann sicher sein, dass der Endbenutzer die Bibliothek besitzt.

0

Verwenden Sie eine merge module mit Ihrer Einrichtung. Sap haben hier eine Liste:

Merge modules

+0

Der Link ist gebrochen –

+0

Hallo Jon, der Link ist nicht kaputt - SO hat einen Fehler. Versuchen Sie diese http://tinyurl.com/b44zl8 – RichardOD

1

Sie könnten überprüfen, ob die folgenden Registrierungsschlüssel

HKEY_CURRENT_USER\Software\Crystal Decisions 

existiert Sie Dies wird zeigen, ob Crystal Reports installiert ist. Wenn Sie eine bestimmte Version überprüfen möchten, aktivieren Sie den Kind-Schlüssel. Zum Beispiel die Crystal Reports mit Visual Studio 2008 installiert ist 10.2

Verwandte Themen