Rubrik: COM/OLE/Registry/DLL · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 08.11.01 |
DLL, EXE, OLB und TLB per Sourcecode registrieren Im Gegensatz zu unserem früheren Tipp lassen sich mit dieser Routine jetzt auch ActiveX-EXE Dateien per Sourcecode registrieren. | ||
Autor: Manfred Luhmann | Bewertung: | Views: 38.478 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
In einem unserer ersten Tipps Dateien per Quellcode registrieren haben wir Ihnen gezeigt, wie sich vor allem ActiveX-DLLs per Sourcecode registrieren lassen, um so den Fehler 429 Objekterstellung durch ActiveX-Komponente nicht möglich zu vermeiden.
Mit dem nachfolgenden Modul ist es jetzt auch möglich, ActiveX-EXE Dateien per Sourcecode zu registrieren.
Option Explicit ' ------------------------------------------------------- ' ' Mit der Funktion "RegisterFile" können dll,exe,olb ' und tlb-Dateien registriert und deregistriert werden. ' ' Aufgerufen wird das Programm \windows\regtlib.exe ' Luhmann, 07.11.01 ' ' ------------------------------------------------------- Private Declare Function CloseHandle Lib "kernel32" ( _ ByVal hObject As Long) As Long Private Declare Function GetExitCodeProcess Lib "kernel32" ( _ ByVal hProcess As Long, _ lpExitCode As Long) As Long Private Declare Function OpenProcess Lib "kernel32" ( _ ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Boolean, _ ByVal dwProcessID As Long) As Long Private Declare Function WaitForSingleObject Lib "kernel32" ( _ ByVal hHandle As Long, _ ByVal dwMilliseconds As Long) As Long ' Datei registrieren/deregistrieren Public Function RegisterFile(ByVal Filename As String, _ Optional ByVal Register As Boolean = True) As Long Const PROCESS_QUERY_INFORMATION = &H400 Dim CmdLine As String Dim dwProcessID As Long Dim hProcess As Long If Register Then ' Datei registrieren CmdLine = "regtlib " & Filename Else ' Datei deregistrieren CmdLine = "regtlib -u " & Filename End If ' Prozess-ID dwProcessID = VBA.Interaction.Shell(CmdLine) ' Prozess öffnen hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, _ False, dwProcessID) If hProcess = 0 Then ' Fehler! RegisterFile = Err.LastDllError Call ErrMsg("OpenProcess " & CmdLine, RegisterFile) Exit Function End If ' Datei registrieren/deregistrieren Call WaitForSingleObject(hProcess, 1000) Call GetExitCodeProcess(hProcess, RegisterFile) If RegisterFile <> 0 Then _ Call ErrMsg("GetExitCodeProcess " & CmdLine, RegisterFile) ' Prozess schliessen Call CloseHandle(hProcess) End Function ' Fehhlermeldung auswerten Private Sub ErrMsg(ByVal Info As String, _ ByVal Errno As Long) Dim Errtext As String Select Case Errno Case 0: Errtext = " ok" Case 3: Errtext = " File not found or not a Typelib" Case 5: Errtext = " File was not registered" Case &H103: Errtext = "Process still active" Case Else: Errtext = "??" End Select MsgBox Info & vbCr & "Error=" & Errno & Errtext, _ vbExclamation, VB.App.EXEName End Sub