![]() |
AW: DLL Side-by-side registration & redirection
Zitat:
|
AW: DLL Side-by-side registration & redirection
Zitat:
Wie viele ActiveX DLL's möchtest du haben die ich schon selbst geschrieben habe? Aber da du diese nicht mit LoadLibrary in den Speicher laden willst vergiss es denn das ist eine der Voraussetzungen um ActiveX dll's während der Laufzeit zu registrieren und auszuführen. Wie gesagt im welchen Pfad diese sich befinden ist wurscht. gruss |
AW: DLL Side-by-side registration & redirection
Ich halte mich an das was der Hersteller sagt.
Beispiel: Zitat:
![]() Heißt: Es muss entweder registriert werden oder man nutzt "side-by-side". |
AW: DLL Side-by-side registration & redirection
Kenne die DLL nicht.
Zitat:
Ich mache es so.. mit LoadLibrary von meinem Plugin System.
Code:
Private Sub CheckVisPlugin()
VisPlugin = GetSetting(App.EXEName, "Option", "PluginVisual", vbNullString) If Right$(VisPlugin, 4) = ".dll" Then RegServe VisPlugin, True VisPlugin = GetFileName(VisPlugin) PluginName = Left$(VisPlugin, Len(VisPlugin) - 4) Set PluginVis = CreateObject(PluginName & ".clsMain") msgPlg.Visual = True PluginVis.ToolBarVisible = frmToolbar.Visible = True PluginVis.EQVisible = frmEqualizer.Visible = True PluginVis.SkinChange sOldSkinName If Me.WindowState = vbMinimized Then PluginVis.PlayerVisible = False Else PluginVis.PlayerVisible = Me.Visible End If If stndPlayList = 1 Then PluginVis.PlaylistVisible = True PluginVis.PlaylistPos frmPlayList.Left, frmPlayList.Top, frmPlayList.Width, frmPlayList.Height Else PluginVis.PlaylistVisible = False End If PluginVis.Execute FrmMain_Hwnd End If End Sub
Code:
Nur damit du siehst das ich dir nicht nur was erzähle sondern weis wie es geht.
Public Function RegServe(ByVal Path As String, _
ByVal mode As Boolean) As Boolean Dim insthLib As Long Dim lpLibAdr As Long Dim hThd As Long Dim lpExCode As Long Dim procName As String Dim Result As Long Dim okFlag As Boolean '### DLL in den Speicher laden insthLib = LoadLibrary(Path) '### Aktion wählen If insthLib Then If mode Then procName = "DllRegisterServer" Else procName = "DllUnregisterServer" End If '### Adresse der DLL im Speicher lpLibAdr = GetProcAddress(insthLib, procName) If lpLibAdr <> 0 Then '### Aktion starten hThd = CreateThread(ByVal 0, 0, ByVal lpLibAdr, ByVal 0&, 0&, 0&) If hThd Then '### Maximal 5 sec warten Result = WaitForSingleObject(hThd, 5000) If Result = STATUS_WAIT_0 Then '### Vorgang erfolgreich in 5 sec beendet Call CloseHandle(hThd) okFlag = True Else '### 5 sek. überschritten -> Thread schließen Call GetExitCodeThread(hThd, lpExCode) Call ExitThread(lpExCode) Call CloseHandle(hThd) End If End If End If '### Speicher wieder freigeben Call FreeLibrary(insthLib) End If If Not okFlag Then MsgBox ("Fehler! Der Vorgang wurde abgebrochen.") Else 'MsgBox ("Der Vorgang war erfolgreich!") End If RegServe = okFlag End Function gruss |
AW: DLL Side-by-side registration & redirection
Und das funktioniert ohne Adminrechte?
Denn regsvr32.exe macht ja im Endeffekt auch genau das was der obige Quellcode tut. Ich bin sehr ungläubig, aber ich probiere es bei Gelegenheit aus. ![]() |
AW: DLL Side-by-side registration & redirection
Zitat:
Aber ich habe nebenbei aus Sicherheitsgründen das noch zu meinem Manifest addiert. Du hättest es nicht extra nochmal verlinken müssen denn hier steht doch wie es geht.
Code:
Wie gesagt ich kann alle meine DLL's zur Laufzeit registrieren und unregistrieren wo sich der Pfad zur DLL befindet ist dabei zu vernachlässigen.
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <!-- UAC Manifest Options If you want to change the Windows User Account Control level replace the requestedExecutionLevel node with one of the following. <requestedExecutionLevel level="asInvoker" uiAccess="false" /> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> Specifying requestedExecutionLevel element will disable file and registry virtualization. Remove this element if your application requires this virtualization for backwards compatibility. --> <requestedExecutionLevel level="asInvoker" uiAccess="false" /> </requestedPrivileges> </security> </trustInfo> Und im übrigen alle Dll's die mit VB erstellt werden sind ActiveX Dll's (denn hier gibt es keine "normalen" Dll's) Ich verwende kein regServ32 sondern erstelle das Objekt selbst wenn LoadLibrary erfolgreich war. Siehe! CreateObject(PluginName & ".clsMain") clsMain ist der Einsprungs punkt der geladenen DLL. Diese Classe muss in jeder DLL vorhanden sein. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz