2009-06-09 6 views
8

Ich habe ein .NET-Projekt, das Crystal Reports verwendet. Die Anwendung wird mit ClickOnce verteilt. Dinge funktionieren gut, wenn der Benutzer Crystal auf ihrem Computer installiert hat. Nicht alle Endbenutzer haben jedoch Crystal Reports auf ihren Computern installiert. Diese Benutzer erhalten die folgende Fehlermeldung ....NET ClickOnce nicht erforderliche Dateien installieren?

"Kann die Anwendung nicht installieren oder ausführen. Die Anwendung erfordert, dass die Assembly CrystalDecisions.ReportAppServer.XmlSerialize Version 10.5.3700.0 zuerst im globalen Assemblycache (GAC) installiert wird."

Gibt es eine Möglichkeit, ClickOnce-Installationen zu erzwingen, um sicherzustellen, dass eine Voraussetzung installiert ist?

+0

Haben Sie Crystal Reports als Teil der Voraussetzungen in Ihren ClickOnce-Veröffentlichungseinstellungen aufgenommen? –

Antwort

11

Nein. Es besteht eine Menge Verwirrung über ClickOnce und Voraussetzungen.

ClickOnce tut nichts mit prereqs. Nichts. ClickOnce kopiert Dateien von einem Server auf den Computer eines Clients und hält diese Dateien synchron, wenn die Serverdateien aktualisiert werden - das ist es. Es kann keine Dinge in den GAC setzen, DLLs registrieren, MSI-Dateien usw. installieren.

Wo die Verwirrung entsteht, wenn Sie mit Visual Studio bereitstellen. VS macht mehrere Dinge für Sie, wenn Sie veröffentlichen, die wirklich nichts mit ClickOnce zu tun haben. Zum einen erstellt es eine nette HTML-Seite für Sie mit einigen Links zu Ihrer Bereitstellung. Außerdem können Sie aus mehreren Voraussetzungen auswählen und eine Bootstrapper-Exe für Sie erstellen. Ich gehe davon aus, dass Sie dies für die Installation von Crystal Reports getan haben. Der Bootstrapper ist nur eine einfache Möglichkeit, mehrere Voraussetzungen zu verwalten. Anstatt Ihrem Benutzer zu sagen, dass er X, dann Y, dann Z vor der Installation Ihrer App installieren soll, macht der Bootstrapper diese drei Installationen "nahtlos", so dass sie wie eine große Installation erscheinen. Es kann auch Prereq-Installationen überspringen, wenn der Benutzer es bereits hat.

Wenn Sie auf Ihre HTML-Seite achten, die VS generiert, können Sie zwei Links sehen. Eine für Ihre .application-Datei (die ClickOnce-Bereitstellung) und eine für die Bootstrapper-EXE. Sie sind dem Benutzer ziemlich ausgeliefert und müssen sich darauf verlassen, dass sie die Seite lesen und bei Bedarf den Bootstrapper ausführen. Die einzige Ausnahme ist das .Net Framework, da die HTML-Seite dies über die UserAgent-Zeichenfolge überprüfen kann.

Wenn sie nicht den Bootstrapper ausführen, werden sie Fehler erhalten, die denen ähneln, nach denen Sie fragen.

Eine mögliche Lösung besteht darin, Code zu schreiben, um zu überprüfen, ob es installiert ist. Es könnte die Registrierung oder den Ordner "Programme" überprüfen; was auch immer Sie tun müssen, um sicherzustellen, dass es installiert ist. Dann beenden Sie es elegant und informieren Sie den Benutzer, wenn sie es nicht haben. Das funktioniert so lange, wie Sie die Überprüfung durchführen, bevor Sie versuchen, die Crystal-Baugruppen zu laden und zu verwenden.

Viel Glück! Bitte antworten Sie, wenn Sie eine bessere Lösung finden.

+1

Whatknott, ich lese ein paar Ihrer anderen Beiträge und fühle, dass ich ein besseres Verständnis habe. Danke für die Bestätigung und Erklärung dieses Themas. – proudgeekdad

+0

Ihre Begrüßung. Ich erinnere mich an die gleichen Fragen und Frustrationen mit ClickOnce. Ich hoffe ich habe dir einen _little_ Schmerz gerettet :) – codeConcussion

+0

Tolle Erklärung! –

-1

In den Voraussetzungen, wählen Sie Crystsal Report für .Net Framework (NICHT Crystal Report für Visual Studio) und veröffentlichen.

Verwandte Themen