ich suche eine M�glichkeit OLB Dateien wie die ""C:\Program Files
(x86)\Microsoft Office\Office12\MSACC.OLB" per C# Code zu registrieren. F�r
OCX und DLL Dateien mache ich das �ber einen neuen Prozessaufruf der
regsvr32.exe im silent Modus. Ich habe da zwar nicht hin bekommen,
abzugreifen, ob der Vorgang erfolgreich war, aber damit k�nnte ich leben.
Mit der regsvr32.exe kann man jedoch keine OLB Dateien registrieren. Jetzt
habe ich gegoogelt wie ein Wilder und fand tats�chlich auch einen Blog
Eintrag
(http://www.zorched.net/2009/01/01/register-and-unregister-com-dll-from-net-code/),
doch dieser funktionierte nicht mal bei einer normalen DLL Datei, z.B. der
"C:\Program Files (x86)\Common Files\microsoft shared\DAO\dao360.dll".
Hatte schon mal jemand das selbe Problem und hat eine L�sung gefunden?
Wie immer bin ich f�r jede Hilfe sehr dankbar.
Gr��e
Manu
> ich suche eine M�glichkeit OLB Dateien wie die ""C:\Program Files
> (x86)\Microsoft Office\Office12\MSACC.OLB" per C# Code zu
> registrieren. F�r OCX und DLL Dateien mache ich das �ber einen neuen
> Prozessaufruf der regsvr32.exe im silent Modus.
regtlib.exe
mfg GP
"G�nter Prossliner" <nos...@spam.com> schrieb im Newsbeitrag
news:#qoYaPc7...@TK2MSFTNGP06.phx.gbl...
> Auf die Datei bin ich auch schon gesto�en. Jedoch befindet sie sich
> nicht auf einer Standard Installation von Win7 oder WinVista (mehr
> habe ich noch nicht getestet) und sie extra mit dem Setup
> auszuliefern w�re oversized.
Mittels depends.exe sieht man, dass regtlib.exe die Funktion
"RegisterTypeLib" aus der OLEAUT32.dll importiert.
Das ist sicherlich vielversprechend!
[RegisterTypeLib]
http://msdn.microsoft.com/en-us/library/ms221570(VS.90).aspx
[RegisterTypeLibForUser]
http://msdn.microsoft.com/en-us/library/ms221504(VS.90).aspx
[pinvoke.net: RegisterTypeLib (oleaut32)]
http://www.pinvoke.net/default.aspx/oleaut32/RegisterTypeLib.html
OK?
mfg GP
"G�nter Prossliner" <nos...@spam.com> schrieb im Newsbeitrag
news:O0UZ8yc7...@TK2MSFTNGP06.phx.gbl...
> Vom Prinzip her, habe ich alles verstanden und das sollte auch der
> L�sungsweg sein. Jedoch �berschreitet es meine F�higkeiten es in c#
> umzusetzen.
Du kannst auch in VB.Net machen.
> Ich habe den Code in VB.net ausprobiert und dort
> funktionierte die Registrierung der MSACC.OLB ebenfalls nicht.
Was hei�t "funktionierte nicht"?
> Da ich mit Zugriff auf APIs absolut unerfahren bin, mache ich es mir
> schwer den Fehler zu ermitteln.
Wie hast Du es denn angewendet?
Grob gesagt m�sste es so gehn (Deklarationen aus pinvoke.net und nicht
getestet):
Import System.Runtime.InteropServices.ComTypes
Import System.Runtime.InteropServices
Declare Unicode Function RegisterTypeLib Lib "oleaut32.dll" (ByVal ptlib As
System.Runtime.InteropServices.ComTypes.ITypeLib, ByVal szFullPath As
String, ByVal szHelpDir As String) As Integer
Declare Unicode Function LoadTypeLib Lib "oleaut32.dll" (ByVal szFile As
String, ByRef TPpTypeLib As
System.Runtime.InteropServices.ComTypes.ITypeLib) As Integer
string libPath = ".....\xxx.tlb";
Dim typeLib as ITypeLib
LoadTypeLib(libPath, ByRef typLib)
RegisterTypeLib(typeLib, libPath, null)
OK?
mfg GP
"G�nter Prossliner" <nos...@spam.com> schrieb im Newsbeitrag
news:uHAykte7...@TK2MSFTNGP06.phx.gbl...
Private Declare Unicode Function LoadTypeLib Lib "oleaut32.dll" (ByVal
TLpszModule As String, ByRef TPpTypeLib As ComTypes.ITypeLib2) As Integer
Private Declare Unicode Function RegisterTypeLib Lib "oleaut32.dll"
(ByVal ptlib As ComTypes.ITypeLib2, ByVal szFullPath As String, ByVal
szHelpDir As String) As Integer
Private Declare Unicode Function UnRegisterTypeLib Lib "oleaut32.dll"
(ByRef LibID As System.Guid, ByVal nVerMajor As Short, ByVal nVerMinor As
Short, ByVal lCID As Integer, ByVal tSysKind As ComTypes.SYSKIND) As Integer
Private Const ERROR_SUCCESS As Short = 0
Public Function RegisterTLib(ByVal strFile As String, ByVal bRegister As
Boolean) As Boolean
Dim nResult As Integer
Dim TLB As ComTypes.ITypeLib2 = Nothing
Dim tlbAttrPtr As IntPtr
Dim tlbAttr As ComTypes.TYPELIBATTR
On Error Resume Next
If My.Computer.FileSystem.FileExists(strFile) = False Then
RegisterTLib = False
Else
nResult = LoadTypeLib(strFile, TLB)
If nResult = ERROR_SUCCESS Then '<---------- Stelle markiert
If bRegister Then
nResult = RegisterTypeLib(TLB, strFile, Nothing)
If nResult = ERROR_SUCCESS Then 'success
RegisterTLib = True
Else 'failure
RegisterTLib = False
End If
Else
TLB.GetLibAttr(tlbAttrPtr)
tlbAttr = CType(Marshal.PtrToStructure(tlbAttrPtr,
GetType(ComTypes.TYPELIBATTR)), ComTypes.TYPELIBATTR)
nResult = UnRegisterTypeLib(tlbAttr.guid,
tlbAttr.wMajorVerNum, tlbAttr.wMinorVerNum, tlbAttr.lcid, tlbAttr.syskind)
tlbAttr = Nothing
TLB.ReleaseTLibAttr(tlbAttrPtr)
If nResult = ERROR_SUCCESS Then 'success
RegisterTLib = True
Else 'failure
RegisterTLib = False
End If
End If
Else ' error loading the TypeLibrary file
RegisterTLib = False
End If
End If
End Function
An der markierten Stelle bekommt die Methode nResult = -2147319780 zur�ck,
weshalb RegisterTLib = False zur�ckgibt.
Gr��e
Manuel
"G�nter Prossliner" <nos...@spam.com> schrieb im Newsbeitrag
news:uHAykte7...@TK2MSFTNGP06.phx.gbl...
> An der markierten Stelle bekommt die Methode nResult = -2147319780
> zur�ck, weshalb RegisterTLib = False zur�ckgibt.
-2147319780 (8002801C) ist offensichtlich ein "beliebter" Code bei COM
Registrierungen:
[8002801C - Google-Suche]
http://www.google.at/search?q=8002801C
Deshalb folgende Fragen:
* funktioniert denn die Registrierung (versuchshalber) mit regtlib.exe?
* um welche .olb handelt es sich? Microsoft? Office?
mfg GP