Avatar billede slapstick Nybegynder
25. februar 2003 - 10:52 Der er 8 kommentarer og
1 løsning

igen igen unreg activex komponent

jeg skal unregge en activex komponent

har prøvet at bruge det her eksempel jeg har lavet ud fra et post fra shj koden kommer her:

Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long
Private Const ERROR_SUCCESS = &H0



Private Sub cmdUnpoint_Click()

If optExcel.Value = True Then
txtName.Caption = "xpoint30_excel.ocx"
End If
  Call RegisterServer(Me.hWnd, txtName.Caption, False)
End Sub

Public Function RegisterServer(hWnd As Long, DllServerPath As String, bRegister As Boolean)
On Error Resume Next
Dim lb As Long, pa As Long
lb = LoadLibrary(DllServerPath)
  If bRegister Then
    pa = GetProcAddress(lb, "DllRegisterServer")
      Else
    pa = GetProcAddress(lb, "DllUnregisterServer")
  End If
 
  If CallWindowProc(pa, hWnd, ByVal 0&, ByVal 0&, ByVal 0&) = ERROR_SUCCESS Then
    MsgBox IIf(bRegister = True, "Registration", "Unregistration") + " Successful"
      Else
    MsgBox IIf(bRegister = True, "Registration", "Unregistration") + " Unsuccessful"
  End If
FreeLibrary lb
End Function

Private Sub cmdExit_Click()
End
End Sub


og jeg har prøvet at bruge shell kommandoen til at køre regsvr32 men med begge dele er komponenten stadig regget bagefter og virker fuldt ud og det er jo ikek så fedt hehe
koden til shell forsøget kommer her:

Public Sub Unreg()
txtStatus.Caption = "Unregistering..."
Shell ("regsvr32.exe /u /s " & txtName.Caption)
txtStatus.Caption = "Done."
End Sub



Private Sub cmdUnpoint_Click()

If optExcel.Value = True Then
txtName.Caption = "xpoint30_excel.ocx"

End If

If optDeveloper.Value = True Then
txtName.Caption = "xpoint30_excel.ocx"
End If

If optRuntime.Value = True Then
txtName.Caption = "xpoint30_excel.ocx"
End If
Call Unreg
End Sub



Private Sub cmdExit_Click()
End
End Sub

Private Sub optDeveloper_Click()
txtStatus.Caption = "X@Point Developer 3.0"
End Sub

Private Sub optExcel_Click()
txtStatus.Caption = "X@Point Excel 3.0"
End Sub

Private Sub optRuntime_Click()
txtStatus.Caption = "X@Point Viewer 3.0"
End Sub
Avatar billede somaliomar Praktikant
25. februar 2003 - 11:55 #1
Prøv det her

- I din modul tilføjer du flg. kode

Option Explicit

Private Const CREATE_SUSPENDED = &H4
Private Const INFINITE = &HFFFFFFFF  ' Infinite timeout
Private Const STATUS_WAIT_0 = &H0
Private Const STATUS_ABANDONED_WAIT_0 = &H80
Private Const STATUS_TIMEOUT = &H102
Private Const WAIT_FAILED = &HFFFFFFFF
Private Const WAIT_OBJECT_0 = ((STATUS_WAIT_0) + 0)
Private Const WAIT_ABANDONED = ((STATUS_ABANDONED_WAIT_0) + 0)
Private Const WAIT_TIMEOUT = STATUS_TIMEOUT
Private Const STATUS_PENDING = &H103
Private Const STILL_ACTIVE = STATUS_PENDING

Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" _
        (ByVal lpLibFileName As String) As Long

Private Declare Function FreeLibrary Lib "kernel32" _
        (ByVal hLibModule As Long) As Long

Private Declare Function GetProcAddress Lib "kernel32" _
        (ByVal hModule As Long, ByVal lpProcName As String) As Long

Private Declare Function CreateThread Lib "kernel32" _
        (lpThreadAttributes As Any, ByVal dwStackSize As Long, _
        lpStartAddress As Long, lpParameter As Any, _
        ByVal dwCreationFlags As Long, lpThreadID As Long) As Long

Private Declare Function WaitForSingleObject Lib "kernel32" _
        (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" _
        (ByVal hObject As Long) As Long

Private Declare Sub ExitThread Lib "kernel32" (ByVal dwExitCode As Long)

Private Declare Function ResumeThread Lib "kernel32" _
        (ByVal hThread As Long) As Long

Private Declare Function GetExitCodeThread Lib "kernel32" _
        (ByVal hThread As Long, lpExitCode As Long) As Long

Public Function fVBRegServer(ByVal strFilePath As String, _
                Optional ByVal blnRegister = True) As Boolean
               
Dim lngModuleHandle As Long      ' module handle
Dim lngFunctionAdr  As Long      ' reg/unreg function address
Dim lngThreadID    As Long      ' dummy var that get's filled
Dim lngThreadHandle As Long      ' thread handle
Dim lngExitCode    As Long      ' thread's exit code if it doesn't finish
Dim blnSuccess      As Boolean  ' if things worked

    '
    ' Load the file into memory.
    '
    lngModuleHandle = LoadLibrary(strFilePath)
     
    '
    ' Get the registration function's address.
    '
    If blnRegister Then
        lngFunctionAdr = GetProcAddress(lngModuleHandle, "DllRegisterServer")
    Else
        lngFunctionAdr = GetProcAddress(lngModuleHandle, "DllUnregisterServer")
    End If
   
    If lngFunctionAdr <> 0 Then
        '
        ' Create an alive thread and execute the function.
        '
        lngThreadHandle = CreateThread(ByVal 0, 0, ByVal lngFunctionAdr, ByVal 0, 0, lngThreadID)
       
        '
        ' If we got the thread handle...
        '
        If lngThreadHandle Then
            '
            ' Wait for the thread to finish.
            '
            blnSuccess = (WaitForSingleObject(lngThreadHandle, 10000) = WAIT_OBJECT_0)
         
            '
            ' If it didn't finish...
            '
            If Not blnSuccess Then
                '
                ' Something happened. Close the thread.
                '
                Call GetExitCodeThread(lngThreadHandle, lngExitCode)
                Call ExitThread(lngExitCode)
            End If
   
            '
            ' Close the thread.
            '
            Call CloseHandle(lngThreadHandle)
        End If
    End If
   
    '
    ' Free the file if we loaded it.
    '
    If lngModuleHandle Then Call FreeLibrary(lngModuleHandle)
   
    fVBRegServer = blnSuccess
   
End Function

Public Function IsDLLActiveX(ByVal strDLLPath As String, Optional ByVal RaiseError As Boolean) As Boolean
Dim lngHMod        As Long
Dim lngLastDllError As Long
 
    lngHMod = LoadLibrary(strDLLPath)
   
    If lngHMod = 0 Then
        If RaiseError Then
            lngLastDllError = Err.LastDllError
            Err.Raise 10000 + lngLastDllError, "IsDLLActiveX", "LoadLibrary-Error: " & lngLastDllError
        End If
    End If
 
    IsDLLActiveX = Abs(CBool(GetProcAddress(lngHMod, "DllRegisterServer")))
    Call FreeLibrary(lngHMod)
End Function



- Når du skal unregister et ActiveX komponent gør du sådan her

Dim strFile As String
Dim blnReturn As Boolean

strFile = "C:\WINNT\System32\component.ocx"
'strFile = "C:\WINNT\System32\component.dll"
blnReturn = fVBRegServer(strFile, False)
               
If blnReturn Then
    Call MsgBox("Unregistration of file '" & strFile & "' succeeded!", vbInformation, "VBRegServer")
Else
    Call MsgBox("Unregistration of file '" & strFile & "' failed!", vbCritical, "VBRegServer")
End If
Avatar billede slapstick Nybegynder
25. februar 2003 - 14:41 #2
bare istedet for det andet kode eller tilføje det?
Avatar billede somaliomar Praktikant
25. februar 2003 - 14:41 #3
I stedet for det andet kode...
Avatar billede slapstick Nybegynder
25. februar 2003 - 15:42 #4
yay fik det os til at virke !! for smukt
tak :) smid et svar så gir jeg dig point
og ved du tilfældigvis hvordan jeg sletter en fil nu jeg er igang?
Avatar billede slapstick Nybegynder
25. februar 2003 - 15:51 #5
nåh lige,meget med det der slet fil
bre smid et svar :)
Avatar billede somaliomar Praktikant
25. februar 2003 - 19:11 #6
Prøv at slette din fil med:

  Kill strFile
Avatar billede sion Nybegynder
25. februar 2003 - 19:11 #7
...eller:
Shell "regsvr32.exe xpoint30_excel.ocx" 'Registerer
Shell "regsvr32.exe /u xpoint30_excel.ocx" 'Afregisterer
Shell "regsvr32.exe /u /s xpoint30_excel.ocx" 'Afregisterer uden at give meddeleser til brugeren

Synes jeg er noget lettere, men hvis du gerne vil gøre det 'the hard way' så smid pointene efter somaliomar :)
-Sion
Avatar billede sion Nybegynder
25. februar 2003 - 19:13 #8
ups, det har du prøvet ;)
det burde ellers virke...
Avatar billede slapstick Nybegynder
26. februar 2003 - 10:30 #9
yay sion undrede mig også over det ikke virkede hehe
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester