webForumDet fria alternativet

Uppdatera ISAPI DLL

9 svar · 500 visningar · startad av Swey

SweyMedlem sedan apr. 20002 000 inlägg
#1

Hej,
Om jag har en ett program i en ISAPI DLL så laddas den in i minnet första gången filen anropas. Det är bra eftersom Windows inte behöver ladda in filen varje gång programmet ska köras.

Problemet är att jag inte vet hur jag ska få IIS att ladda ur filen från minnet så att jag kan radera eller uppdatera den. Eftersom den är inladdad så är den skrivskyddad och kan inte bytas ut. Det enda sättet som jag känne till är att starta om IIS med en bat-fil som jag skapade tidigare. Se http://cgi.webforum.nu/wf/Forum16/HTML/000022.html

Det är dock väldigt jobbigt att starta om IIS varje gång jag ska ändra i filen och det är därför ingen bra lösning. Finns det någon annan?

Mycket tacksam för svar. Jag använder Windows 2000.

mvh

------------------
- Swey
Skriv först, tänk sen!

emissionMedlem sedan dec. 19996 095 inlägg
#2

Nej, det är tyvärr det enda sättet. Man kan stänga av DLL:en under drift, men jag tror tyvärr inte att det går att ladda in en ny version.

Det är ett ISAPI-filter vi snackar om va? :)

mvh

SweyMedlem sedan apr. 20002 000 inlägg
#3

Tack för svaret.

ISAPI-filter, heter det så?
Det är ett program som är kompilerat i C++ Builder som ISAPI DLL och kopierad till \Inetpub\Scripts.

Finns det inget annat sätt att frigöra filen än att starta om alla delar i IIS? Eller finns det något annat sätt att köra filen?

------------------
- Swey
Skriv först, tänk sen!

emissionMedlem sedan dec. 19996 095 inlägg
#4

Nä, då är det inte ett ISAPI-filter.

Nej, så länge du kör med din "globala" IIS så måste du starta om den hela tiden. Jag har dock för mig att man kan ställa in C++ Builder att själv starta en egen IIS, så att man kan debugga mycket enklare. Det går med Delphi. Annars kanske du kan använda
http://www.drbob42.com/tools/intrabob.htm

------------------
-------------------
What a waste it is to lose one's mind. Or not to have a mind is being very wasteful. How true that is.
Dan Quayle

SweyMedlem sedan apr. 20002 000 inlägg
#5

Annars kanske du kan använda
Ska ta en titt på den!

Jag har dock för mig att man kan ställa in C++ Builder att själv starta en egen IIS
C++ Builder är precis som Delphi. Vet du hur man ställer in det (eller ska jag ställa frågan i Delphi-forumet)? :)

------------------
- Swey
Skriv först, tänk sen!

SweyMedlem sedan apr. 20002 000 inlägg
#6

Den som söker han finner. :D
http://community.borland.com/article/0,1410,23024,00.html

------------------
- Swey
Skriv först, tänk sen!

emissionMedlem sedan dec. 19996 095 inlägg
#7

Bra funnet! ....eller nåt... ;)

SweyMedlem sedan apr. 20002 000 inlägg
#8

Om vi återgår till grundproblemet.

Det är väldigt dåligt att man måste starta om IIS för att kunna uppdatera filen. Det innebär att jag måste ha behörighet att starta om IIS för att kunna använda ISAPI. Om jag laddar upp ett program till en ftp-server kan jag aldrig ersätta filen igen utan att starta om IIS. Eftersom jag inte kan göra det så är det kört. Om jag nu skulle starta om IIS skulle jag antagligen tappa besökare som inte gillade att sidan slutar ladda.

Detta är väldigt dåligt. Det måste gå att lösa på ett annat sätt. Man kanske inte ska använda ISAPI?

Lite butter är jag. :)

------------------
- Swey
Skriv först, tänk sen!

emissionMedlem sedan dec. 19996 095 inlägg
#9

Från http://msdn.microsoft.com/library/backgrnd/html/nilewp.htm

"By default, IIS 4.0 caches ISAPI extension DLLs. This is great in a production web site because it means good performance, but not so great on a test server because it prevents you from replacing your DLLs freely during development. There are four main ways of getting around this problem:

  • Disable ISAPI caching in the IIS Admin console (bring up the properties for your Web site, click the Configuration... button on the Home Directory page, and uncheck the Cache ISAPI applications box on the App Mappings page, click OK a couple of times, then stop and restart the Web service). This will enable you to replace your DLL at will, but it will make your Web site really slow because IIS seems to load and unload the extension for every request.
  • Run your Web site in a separate process (display the properties for your Web site in the IIS Admin console, display the Home Directory page and check the box marked Run in separate memory space) and unload the process every time you need to make a change (bring up the properties for your Web site and click the Unload button on the Home Directory page).
  • Stop and restart the Web service every time you need to make a change (type "net stop w3svc" and "net start w3svc" at a command prompt). Stopping the Web service causes IIS to release any DLLs that it had loaded.
  • Use an ISAPI extension whose job it is to load another extension DLL on demand and unload it after some criterion is met.

"

------------------
-------------------
What a waste it is to lose one's mind. Or not to have a mind is being very wasteful. How true that is.
Dan Quayle

SweyMedlem sedan apr. 20002 000 inlägg
#10

Tack för det utkastet!

Vilket alternativ är bäst?

Det sista alternativet låter bra. Hur går man tillväga för att använda det?

------------------
- Swey
Skriv först, tänk sen!

Genererad på 391 ms · cache AV · v20260730165559-full.f96bc7eb