Af en toe, als je een Windows-gebruiker bent, is de kans groot dat je waarschijnlijk de regsvr32.exe
hulpprogramma hebt moeten uitvoeren om een DLL te “registreren”. Als dat het geval is, was je waarschijnlijk niet precies op de hoogte van wat er onder de motorkap gebeurde. Dit cryptische hulpprogramma wordt gebruikt om Object Linking and Embedding (OLE) controls te beheren die veel Windows-toepassingen gebruiken.
Maar wat is precies een OLE-control en waarom zou je een OLE-control willen registreren? In deze tutorial leer je de vele manieren om een OLE-control te installeren, deïnstalleren, registreren of deregistreren met behulp van het regsvr32.exe
hulpprogramma.
Vereisten
Zorg ervoor dat je aan de onderstaande vereisten voldoet om het regsvr32.exe
hulpprogramma uit te voeren:
- Aangezien het regsvr32.exe hulpprogramma is ingebouwd in de meeste versies van Windows, heb je alleen een Windows-computer nodig met een beheerdersaccount.
- Je hebt PowerShell 7 nodig om gebruik te kunnen maken van het PowerShell-script dat is opgenomen in deze tutorial.
Wat zijn OLE-controls?
Voordat je leert hoe je het regsvr32.exe
hulpprogramma moet gebruiken, moet je eerst een rudimentair begrip hebben van wat dit hulpprogramma beheert, namelijk OLE-controls.
OLE-controls zijn een Windows-specifieke technologie die is ontwikkeld om het insluiten en koppelen van documenten en andere objecten te vergemakkelijken. Deze technologie heeft zich in de loop der jaren ontwikkeld en verschillende componenten zijn gebouwd bovenop de OLE-technologie.
Je hebt misschien gehoord van Component Object Model (COM), Distributed Component Object Model (DCOM), of ActiveX-controls. Elk van deze technologieën is gebouwd op of is een uitbreiding van de OLE-technologie die een standaardinterface definieert voor functies geschreven in verschillende programmeertalen.
ActiveX is verouderd maar nog steeds beschikbaar via Internet Explorer op Windows 10, maar niet op Microsoft Edge.
Registratie van OLE-controls
Nu je begrijpt wat het hulpprogramma regsvr32.exe
doet, is het tijd om een OLE-control te registreren, en er zijn verschillende commando-varianten om dat te doen. Kies een van de onderstaande commando-varianten of probeer ze gewoon allemaal.
Je kunt OLE-controls registreren via PowerShell of een Windows-opdrachtprompt. Zorg er in beide gevallen voor dat je de opdrachtprompt uitvoert als beheerder om ervoor te zorgen dat de control correct wordt geregistreerd.
Weergave van een GUI-resultaat
Het registreren van een DLL met regsvr32, in het eenvoudigste geval, houdt in dat het DLL-pad aan de tool wordt doorgegeven. Standaard geeft regsvr32 een pop-up weer om succes (of mislukking) aan te geven. Om een DLL te registreren, dient u de naam of het volledige pad van de DLL zoals hieronder weergegeven op te geven.
Door de onderstaande opdracht uit te voeren, worden de benodigde registerklassen voor de doel-OLE-besturingselement gemaakt in de HKEY_CLASSES_ROOT\CLSID-sleutel voor x64-instanties of in de HKEY_CLASSES_ROOT\WOW6432Node\CLSID-sleutel voor x86-instanties.
Bij succes ziet u een GUI-resultaat waarin wordt vermeld dat DllRegisterServer succesvol was.

Wanneer u een OLE-besturingselement registreert, past regsvr32.exe het systeemzoekpad toe. Als u dus een specifiek bestand buiten dat pad moet registreren, kunt u het beste het absolute pad naar het bestand opgeven.
Een OLE-besturingselement stil registreren
Wanneer u opdrachten uitvoert, is het niet altijd wenselijk dat er een GUI-prompt wordt weergegeven. Laten we dus eens kijken hoe u elke GUI-prompt kunt onderdrukken bij het registreren van een OLE-besturingselement.
Om GUI-prompt te onderdrukken, voert u regsvr32 uit, gevolgd door de DLL-naam (bijv. msxml3.dll) en de /s-schakelaar om het OLE-besturingselement stil te registreren. Het enige nadeel van deze opdracht is dat u ook eventuele foutmeldingen onderdrukt.
Een ongedocumenteerde schakelaar, /e, bestaat waarmee u alleen het GUI-succesbericht kunt onderdrukken, maar het GUI-foutbericht wordt weergegeven – slim!

Het registreren van een OLE-besturingselement en het specificeren van een installatieactie
Wanneer u een DLL opgeeft voor een OLE-registratie, roept u alleen de methode DllRegisterServer
aan, maar er zijn momenten waarop u actie moet ondernemen na registratie. Om dat te doen, kunt u de parameter /i
specificeren.
Bijvoorbeeld, u kunt een invoerreeks (U
) doorgeven aan de parameter /i
die zowel de methode DllInstall
als de methode DllRegisterServer
zal oproepen.
De methode
DllInstall
stelt het hulpprogrammaregsvr32.exe
in staat om een DLL op meer dan één manier te installeren en verschillende acties op te roepen voor één DLL.

Het specificeren van een installatieactie zonder de methode DllRegisterServer
aan te roepen
Misschien wilt u alleen een OLE-besturingselement installeren zonder het opnieuw te registreren. Als dat het geval is, voer dan de volgende opdracht uit.
De bovenstaande opdracht gebruikt de parameter /n
om te voorkomen dat de methode DllRegisterServer
wordt aangeroepen voor de DLL shell32.dll bij de installatiemethode DllInstall.

Een OLE-besturingselement afmelden met regsvr32.exe
Als u een OLE-besturingselement zonder fouten heeft geregistreerd, is dat een opluchting. Maar er kan een moment komen waarop u een OLE-besturingselement moet verwijderen als het conflicteert met andere besturingselementen. Gelukkig biedt regsvr32.exe
de mogelijkheid om een OLE-besturingselement af te melden en te verwijderen.
Om een controle te deregistreren en te verwijderen, voer je regsvr32.exe
uit en geef je de parameter /u
mee om de OLE-controle te deregistreren. In de onderstaande GUI-resultaat kun je zien dat de DLL msxml3.dll succesvol is verwijderd.
Om een actie uit te voeren samen met het deregistreren, geef je de actiestring (
U
) mee aan de parameter/i
. Dan zal hetregsvr32
-commando de methodeDllInstall
aanroepen met die actie als een de-installatie, zoals:regsvr32 /i:actie /U msxml3.dll
.

Foutafhandeling voor regsvr32.exe
Je hebt succesvol OLE-controles geregistreerd, maar wat als het registratiecommando een fout tegenkomt? Er zijn een paar fouten die kunnen optreden wanneer je probeert controles te beheren. Deze meldingen kunnen soms cryptisch zijn, maar hieronder worden ze uitgelegd zodat je weet wat ze veroorzaakt.
FAIL_ARGS | ⦿ “Unrecognized flag” ⦿ “Extra argument on command line” ⦿ “This command is only valid when an OLE Custom Control project is open” ⦿ “No DLL name specified” |
Implies that a command-line argument was incorrect. |
FAIL_OLE | “OleInitialize failed” | Implies that there was an error in properly initializing the OLE subsystem. |
FAIL_LOAD | “LoadLibary(<dllname) failed>“ | This can be a host of reasons such as a dependent library missing, the DLL is inaccessible due to permissions, or the file is missing. |
FAIL_ENTRY | ⦿ ” was loaded, but the entry point was not found. does not appear to be an .DLL or .OCX file” ⦿ ” was loaded, but the entry point was not found. may not be exported or a corrupt version may be in memory. Consider using PView to detect and remove it.” ⦿ ” was loaded, but the entry point was not found. may not be exported, or a corrupt version may be in memory. Consider using WPS to detect and remove it.” |
Implies that the entry point in the DLL, or function name, is missing. |
FAIL_REG | “<DLLEntryPoint> in <DLLName> failed“ | Implies that despite all the prior steps completing the system still failed to fully register the DLL. |
Uitbreiding van het hulpprogramma regsvr32.exe
met PowerShell
Aangezien regsvr32.exe
de GUI-uitvoer verkiest, kan automatisering een uitdaging zijn. Om die uitdaging aan te gaan, kun je het hulpprogramma regsvr32.exe
in een PowerShell-functie verpakken. Door een PowerShell-functie te maken, kun je regsvr32.exe
uitvoeren alsof het een ingebouwde PowerShell-cmdlet is.
Als voorbeeld, bekijk de Invoke-RegSvr32
PowerShell-functie hieronder. Deze functie roept het regsvr32
-hulpprogramma aan en gebruikt PowerShell om de exitcode vast te leggen en deze dienovereenkomstig te verwerken. En door vooraf argumentvalidatie toe te passen, kun je zelfs fouten volledig vermijden!
Om te experimenteren met de onderstaande functie, open een nieuwe PowerShell-console en kopieer en plak de code erin. Vervolgens kun je de functie oproepen zoals hieronder weergegeven.
Hieronder vind je een paar voorbeelden van hoe je de functie Invoke-RegSvr32
kunt gebruiken.

Invoke-RegSvr32
PowerShell CommandConclusie
Op dit moment heb je geleerd hoe je DLL’s kunt registreren en deregistreren en hoe je fouten kunt afhandelen. Hoewel regsrv32.exe
misschien niet zo vaak wordt gebruikt bij dagelijkse taken, zijn er bepaalde momenten waarop je een DLL moet registreren of deregistreren.
Om dit nog verder uit te breiden, zou je PowerShell kunnen aanpassen om nog meer controles en uitzonderingen te omvatten. Je zou zelfs een PowerShell-functie kunnen maken om de geregistreerde controls in de CLSID
-registerlocatie weer te geven!