ASPNL logo (1 kb)
zaterdag 17 mei 2008




Microsoft MVP

.NET Codewise Community
<< vorige | overzicht | volgende >>

Hoe kan ik een DLL overschrijven?

Door Michiel van Otegem
28 mei 2001

Als een DLL gebruikt wordt (of is), wordt deze in het geheugen van de server geladen. Voordat je deze DLL kan overschrijven, moet deze eerst weer uit het geheugen gehaald worden. Per versie van IIS (en Windows) verschilt hoe je dit moet doen. In Windows NT 4 kun je verder gebruik maken van Micrsoft Transaction Server (MTX). In Windows 2000 is dit Windows Component Services (WCS) geworden. Hieronder staat een overzicht van de verschillende mogelijkheden en wat je moet doen.

IIS versie 3 (zonder MTX)
Om de DLL uit het geheugen te halen moet je de webservice stoppen. Dit kan je doen d.m.v. Control Panel->Services of via de Internet Service Manager. Nadat de webservice gestopt is, kan je de DLL overschrijven Als de webservice herstart, wordt bij elke nieuwe aanroep de nieuwe DLL gebruikt.

IIS versie 4 (zonder MTX)
Als de DLL niet geregistreerd is als een MTX pakket en de website(s) die de DLL gebruiken draaien niet in een aparte geheugenruimte (controleer dit met de Internet Service Manager), dan moet je dezelfde handelingen verrichten als met IIS 3 moet gebeuren. Gezien de complexiteit van de webservice in IIS 4, is de makkelijkste manier om de webservice te stoppen en te starten via Control Panel->Services.

Als de DLL niet geregistreerd is als een MTX pakket en de websites die de DLL gebruiken allen in een aparte geheugenruimte draaien, zal het stoppen van deze websites voldoende zijn. De DLL zal overschreven worden en de sites kunnen herstart worden.

IIS versie 4 (met MTX)
Als de DLL wel als een MTX pakket geregistreerd is, dan zal de DLL uit het geheugen gehaald worden na het aantal minuten dat is ingesteld met de Transaction Server Explorer voor dat pakket, waarna je de DLL kan overschrijven. Als de DLL nog niet uit het geheugen gehaald is, kan je dat forceren door dit uit het geheugen te halen en vervolgens Shutdown te kiezen met Transaction Server Explorer(rechts klikken op een pakket). Nadat de nieuwe DLL op zijn plaats is, kies dan Refresh All Components (rechts klikken op de computer met de DLL).

Er zit echter een addertje onder het gras.....de nieuwe DLL moet gecompileerd worden met binaire compatibiliteit met de oude DLL. Als je dit niet doet, moet je de oude DLL uit MTX verwijderen en de nieuwe DLL plaatsen, registreren en vervolgens importeren naar het juiste pakket.

IIS versie 5 (zonder WCS)
IIS 5 zonder WCS geeft een behoorlijk probleem. Hier wordt de DLL pas vrijgegeven als de machine opnieuw wordt opgestart. Dit is eventueel te verhelpen door de websites die de DLL gebruiken in een aparte geheugenruimte te laten werken.

IIS versie 5 (met WCS)
In feite is dit precies dezelfde situatie als IIS 4 met MTX. De component manager is nu echter te vinden onder Control Panel->Administrative Tools->Component Services. Let op! Ook hier moet de nieuwe DLL binair compatibel zijn met de oude DLL.

<< vorige | ^ naar boven | overzicht | volgende >>
copyright 2000-2007 ASPNL