2 Stimmen

ActiveX Cab-Dateien codebase # Version aktualisiert CAB nicht ordnungsgemäß

Ok, ich komme hier als letzte Rettung, in der Hoffnung, dass jemand die Antwort darauf kennt, keine Antworten in den Newsgroups und ich habe alles getan, was ich weiß, abgesehen von einer ernsthaften Hacklösung, die ich gerne vermeiden würde.

Hier ist die Situation:

Ich habe eine .NET-Klassenbibliothek, die COM-exponiert ist. Ich verpacke dies in eine CAB-Datei und verwende das Object-Tag, um es in der Seite einzubetten. Auf dem CODEBASE-Attribut zeige ich auf die Cab-Datei und füge eine Version hinzu, wie zum Beispiel "CODEBASE="cabfiles\mycab.cab#version=30.0.0.1"

Das Problem:

Weil dies eine .NET-DLL ist, die für COM freigegeben ist, registriert sie das mit einem InprocServer32-Registrierungsschlüssel, der auf mscoree.dll mit der Version 2.0.50727 verweist, was Sinn macht, da .NET COM-Objekte unter diesem Prozess ausgeführt werden und 2.0.50727 die Version dieser DLL ist. Aber dies bricht das Versionsattribut des CODEBASE-Attributs im OBJECT-Tag.

Jede Version, die ich größer als 2.0.50727 setze, lädt die Inhalte der Cab-Datei erneut herunter und installiert sie.

Ich habe versucht, die Registrierungseinstellungen und -werte zu ändern und eine ganze Reihe von Dingen ausprobiert, aber ich kann die Lösung nicht finden.

Weiß also jemand eine Lösung für dieses Problem?

4voto

Mike Haboustak Punkte 2236

Wenn Ihr Cab installiert ist, müssen Sie den Registrierungsschlüssel aktualisieren:

HKCR/CLSID/{GUID}/InstalledVersion/(Default)

  • {GUID} ist die Klassen-ID Ihres Objekts
  • Der Wert ist der im Html-Element angegebene String ("30.0.0.1" oben).

Windows überprüft mehrere Registrierungsstellen, bevor es zur dll (in Ihrem Fall mscoree.dll) zurückgreift. Der obige Ort dient dazu, etwas pro System zu installieren (HKCR), Sie können es jedoch auch pro Benutzer installieren. Wählen Sie einen der folgenden Orte, um Ihren Versionsstring zu platzieren. Die Standorte werden in der aufgelisteten Reihenfolge überprüft.

  1. HKCU/CLSID/{GUID}/AvailableVersion/(Default)
  2. HKCR/CLSID/{GUID}/AvailableVersion/(Default)
  3. HKCU/CLSID/{GUID}/InstalledVersion/(Default)
  4. HKCR/CLSID/{GUID}/InstalledVersion/(Default)
  5. Ihre Assembly

Es wäre schön, wenn Regasm sich darum kümmern würde, aber das tut es nicht. Sie müssen es manuell in Ihrem Installer einstellen.

2voto

Gianmatteo Punkte 21

Außerdem müssen Sie Kommas für die Versionsnummer verwenden:

"CODEBASE="cabfiles\mycab.cab#version=30,0,0,1"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X