Laden...

Applikation mit ClickOnce - Micosoft.Sqlserver.Dmf.DLL soll instaliert werden

Erstellt von oehrle vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.066 Views
O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 9 Jahren
Applikation mit ClickOnce - Micosoft.Sqlserver.Dmf.DLL soll instaliert werden

Hallo, ich habe eine Applikation die per ClickOnce verteilt wird. Jetzt habe ich eine neue Version erstellt, unter anderem mit einem neuen Zertifikat. Jetzt wollte ich diese Applikation auf einem rechner installieren, wo schon eine Vorgängerversion installiert war.
Jetzt bemängelt der Clinet, das die DLL nicht im GAC installiert werden soll. Kann das über ClickOnce gar nicht gemacht werden?
Wie kann ich das denn sosnt machen? Die Clients haben alle Adminrechte bei dem angemeldeten User. Könnte ich das per Code realisieren oder wie kann ich das automatisiert tun?

502 Beiträge seit 2004
vor 9 Jahren

Eine DLL im GAC zu registrieren geht meines Wissens nach nicht per ClickOnce (ich lass mich aber gerne korrigieren - wär interessant zu wissen...). Per Code ging es vermutlich - aber wozu? Warum verteilst Du sie nicht einfach mit (im Zweifelsfall explizit als "Einschließen" bzw. "Erforderlich" unter den Einstellungen für die Anwendungsdateien eintragen)?

Bart Simpson

Praxis ist wenn alles funktioniert und keiner weiss warum.
Theorie ist wenn man alles weiss, aber nichts funktioniert.

Bei uns wird Theorie und Praxis vereint: Nichts funktioniert und keiner weiss warum...

16.806 Beiträge seit 2008
vor 9 Jahren

Das geht in ClickOnce über ein prerequisite Package, also einem Manifest.
Zur Not die DLL über den CMD-Weg registrieren. Gedacht ist das in ClickOnce aber eigentlich nicht...

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 9 Jahren

Eine DLL im GAC zu registrieren geht meines Wissens nach nicht per ClickOnce (ich lass mich aber gerne korrigieren - wär interessant zu wissen...). Per Code ging es vermutlich - aber wozu? Warum verteilst Du sie nicht einfach mit (im Zweifelsfall explizit als "Einschließen" bzw. "Erforderlich" unter den Einstellungen für die Anwendungsdateien eintragen)?

Bart Simpson

Hallo Bart, das mach ich ja. Habe die DLL's eingebunden ([Einschließen]), aber der Client sagt das diese DLL im GAC eingefügt werden muss. Er kann die Anwendung nicht installieren.
Komisch ist daran, das diese Anwendung in einer vorfigen Version funktioniert hatte, da wurde diese DLL auch gebraucht. Was ist nun anders:

  • Ich habe das Zertifikat 5 Jahre verlängert
  • Jetzt verwende ich VS2013, davor VS2012

Das geht in ClickOnce über ein prerequisite Package, also einem Manifest.
Zur Not die DLL über den CMD-Weg registrieren. Gedacht ist das in ClickOnce aber eigentlich nicht...

Ja, das steht so auch bei Galileo Computing (Rheinwerk), das solche DLL's nicht über ClickOnce in den GAC installiert werden können.

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 9 Jahren

Mein Problem ist eben, das ich an allen Rechnern persönlich vorbei muss und das Zeug installieren.
Mit GACUTIL.EXE /i xxxxx.DLL geht das ja. Habe das Gerade mal mit einer DLL an einem Client per TeamViewer getestet.
So, jetzt muss ich aber ca. 10 DLL's für den Sqlumfang an allen clients installieren. Das hatte ich wohl in der vorigen Ur-Version der Applikation schon mal gemacht.
Ab dieser version habe ich aber ein anderes Zertifikat, weil das alte abgelaufen war. Somit sind für diese Applikation (Anwendung) die DLL's nicht registriert, so vermute ich das mal. Jetzt muss ich die alle wieder manuell mit GACUTIL registrieren. Kann ich das nicht auch in den Code einbauen und abfragen ob die DLL's vorhanden sind? Dann wäre das evtl. immer eine einmalige Sache und geht per Code.

16.806 Beiträge seit 2008
vor 9 Jahren

Wo ist das Problem, dass Du die DLL über ein Prerequisite zuerst auslieferst und via CMD.Exe (Required Packages) direkt aus dem Package installierst?
Add your own (custom) prerequisite to "ClickOnce" application damit sollte es gehen.

Ansonsten wie es Rheinwerk bzw. ClickOnce selbst empfiehlt: auf das Registrieren verzichten und die DLL als Direktverweis im Projekt nutzen.

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 9 Jahren

Wo ist das Problem, dass Du die DLL über ein Prerequisite zuerst auslieferst und via CMD.Exe (Required Packages) direkt aus dem Package installierst?

>
damit sollte es gehen.

Ansonsten wie es Rheinwerk bzw. ClickOnce selbst empfiehlt: auf das Registrieren verzichten und die DLL als Direktverweis im Projekt nutzen.

Hallo Abt, danke für die Info. Der Link geht bei mir ins Nirvana. Ich habe nochmals bei Rheinwerk nachgelesen. Ich habe diese DLL's die ich für den SqlServer brauche eingebunden (bei Anwendungsdateien ==> Veröffentlichungsstatus ==> Einschließen)
Hier ein paar DLL's:
Microsoft.SqlServer.Dmf.dll
Microsoft.SqlServer.ConnectionInfo.dll
Microsoft.SqlServer.Management.Sdk.Sfc.dll
Microsoft.SqlServer.Management.SmoMetadataProvider.dll
.
.
.

So funktioniert das halt nicht, wenn ich Setup.exe starte bekomme ich die Meldung: Fügen sie im GAC die xxxxxx.DLL ein. Fragen sie dazu ihren Admin.

Wie soll ich das nun mit dem Bootstrapper machen? Kann ich die Dateien auch per Hand beim Bootstrapper einfügen? Und wie stoße ich dann die Installation an? Automatisch aus meinem Code, oder macht das ClickOnce dann selber?
Wenn man z.B. die Applikation veröffentlicht und man setzt FW 4.5 voraus, dann muss ClickOnce das ja auch installieren können und zur Verfügung bestellt bekommen. Da habe ich auch schon die *.exe für das FrameWork in dem Bootstrapper-Ordner einstellen müssen, weil es nicht vorhanden war.
Müßte man das in diesem Fall mit den DLL's genauso machen? Da muss aber dann noch ein Ordner bereitgestellt werden, wo die DLL's abgelegt werden, oder? Da kann man bei Anwendungsdateien ==> Downloadgruppe ==> NEU auswählen, hat das evtl damit was zu tun?
Wäre um jeden Tipp dankbar, da ich schon den ganzen Tag an dem Problem hänge.

16.806 Beiträge seit 2008
vor 9 Jahren

Ja gut. Ohne Adminrechte hast Du ohnehin keine Rechte etwas im GAC abzulegen.
Dahingehend ist das ein K.O. für die Anforderung.

P
1.090 Beiträge seit 2011
vor 9 Jahren

Grundlegend sollte es nicht nötig sein die DLL im CAG zu registrieren. Es sollte reichen wenn sie im Verzeichnis der Anwendung (bei der exe) liegt. Und da sollte sie ClickOncs auch sie auch hin kopieren / können.

Schau mal nach ob die DLL beim Client in dem Verzeichnis liegt (Passende Version und gegebenen falls Abhängigkeit. Und das von dir auch nur die Version Referenziert wir, nicht das du noch teile hast die die alte DLL irgendwo Referenzieren.

MFG
Björn

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 9 Jahren

Ja gut. Ohne Adminrechte hast Du ohnehin keine Rechte etwas im GAC abzulegen.
Dahingehend ist das ein K.O. für die Anforderung.

Hallo, die Clients haben Adminrechte, der User der angemeldet ist hat Adminrechte. Daran würde es erst mal nicht scheitern.