2016-03-21 24 views
3

Also mein Szenario ist ein alter Server muss zurücktreten, aber die gemischte Plattform Web-Lösung muss auf einem neuen Windows 2012R2-Server portieren. Mein Hintergrund beinhaltet nicht viel Erfahrung mit den beteiligten Technologien, so dass ich kämpfen muss und alle beteiligten Entwickler vor einigen Jahren ohne Dokumentation geblieben sind, wenn nicht mehr.Registrieren von VB6-Referenzen auf eine EXE

Die klassische ASP-Website verweist auf eine interne DLL, die wir IBase.dll nennen. Ich habe regsvr32 verwendet, um dies zu registrieren, und habe einen erzeugten Fehler zu einem weiteren Fehler gemacht, den ich auf IBase.dll setze, der seine eigenen Referenzen registrieren muss.

InternetBase error '800a01ad' 

ActiveX component can't create object 

/Secure/CaseDetails.asp, line 333 

Ich habe eine Version der Projektdateien für IBase.dll gefunden, die in VB6 geschrieben wurde. Wenn ich in Projekt> Referenzen gehe, hat es Einträge für einige interne .exes. Nun, wenn ich versuchte, diese auf dem neuen Server regsvr32 (von syswow64, obwohl ich beide versucht) Ich erhalte eine Fehlermeldung:

The module "D:\ibase\ibasehelper4.exe" was loaded but the entry-point DLLRegisterServer was not found. 

Make sure that "D:\ibase\ibasehelper4.exe" is a valid DLL or OCX file and then try again. 

auf dem alten Server kann ich Registry-Einträge sehen, die die DLL zu finden, diese EXE zu unterstützen scheinen Verweise. Wie kann ich diese EXEs ordnungsgemäß registrieren, um sie für IBase.dll verfügbar zu machen? Oder sogar, was könnte ich ausprobieren?

+4

Um eine EXE zu registrieren, verwenden Sie ibasehelper4.exe/regserver – Marc

+0

@Marc, die anscheinend etwas getan haben .. etwas. Ich werde testen, aber nicht zuversichtlich, das als Antwort zu posten? :) – Paul

+0

Ich sollte auch hinzufügen: Dokumentieren Sie jede einzelne Sache, die Sie tun, damit die nächste arme Person, die in dieses einsteigen muss, eine helfende Hand hat. Beginnen Sie auch damit, den Fall so schnell wie möglich zu erstellen, um all dies durch aktuelle Technologien zu ersetzen! – Xav

Antwort

3

Es ist eine Weile her, seit ich es zum letzten Mal benutzt habe, aber COM-Objekte kamen * in zwei Varianten: In-Process und Out-of-Process.

DLLs (und OCXs, die für die meisten Zwecke nur eine ausgefallene DLL sind) wurden im selben Prozess wie der aufrufende Code ausgeführt, außer Sie verwenden DCOM und laufen auf einer anderen Maschine, unter anderem.

COM-EXEs sind out-of-process, mit dem entsprechenden Aufwand für das Marshalling und die Interprozesskommunikation.

Wie Marc darauf hingewiesen hat, müssen Sie die EXE mit dem Flag/regserver aufrufen, um die relevanten Registrierungseinträge zu laden. Es macht den gleichen Job wie RegSvr32 für die DLLs.

* absichtlichen Missbrauch der Vergangenheitsform. Ich bin mir sicher, dass immer noch neue von einigen armen Unglücklichen erschaffen werden.

+1

Plus eins. Ich würde auch sagen, dass es manchmal besser ist, diese "als Administrator" – MarkJ

+1

Lächerlichen Missbrauch der Vergangenheitsform zu führen. Hören Sie auf, Leute in die Irre zu führen: COM ist ein Kern von Windows. Sogar .Net nutzt COM und DCOM ziemlich ausgiebig, weil seine eigenen Alternativen unzureichend waren und sich als nicht performant erwiesen. – Bob77

+0

Nun, zumindest ist es fest in meiner Vergangenheit ... – Xav