C# - Virtuális könyvtár létrehozása parancsállománnyal

forráskód letöltése
A parancssori Script-ek számos előnnyel rendelkeznek, a legváltozatosabb műveleteket lehet elvégezni néhány kód megadásával. Kis helyet foglalnak, gyorsan módosíthatók és rendkívül hatékonyak. Többek közt alkalmasak arra, hogy a Web-szerverünkön virtuális könyvtárat hozzanak létre, illetve töröljenek. Cikkünkben elkészítünk két parancsállományt, melyek elvégzik ezeket a műveleteket.
A mellékelt példában elhelyeztünk a Form-on egy Internet Explorer kontrolt, melybe – miután létrehoztuk a Sample mappára mutató virtuális könyvtárat – betölthetjük a Sample.htm állományt.
Annak érdekében, hogy az Internet Explorer kontrolt használhassuk az alkalmazásunkban, a következőket kell tennünk: a Toolbox-on kattintsuk az egér jobb gombjával, és a megjelenő menüből válasszuk ki a Customize ToolBox menüpontot.
A megjelenő ablakban a COM Components lapon a Microsoft Web Browser elemet jelöljük ki. Az ablak bezárása után megjelenik a Toolbox-ban egy Explorer nevű kontrol, melyet mostantól bármely alkalmazásunkban felhasználhatunk.
A kontrolt elhelyezve az alkalmazás Form-ján elérhetjük annak névtereit és osztályait.
A projekthez mellékeltünk két .js kiterjesztésű Script állományt, melyek közül a CreateVD.js a virtuális könyvtár létrehozását, míg a DeleteVD.js annak törlését végzi el. A példaalkalmazásban a LÉTREHOZÁS gombbal hozhatjuk létre a Sample fizikai mappára mutató virtuális mappát, a TÖRLÉS gombbal törölhetjük azt. Ezeket a műveleteket a Process osztály Start metódusával végezhetjük el, amelynek segítségével futtathatjuk a két parancsállományt.
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "CreateVD.js";
Process.Start(psi);
...
A létrehozás után az ELLENŐRZÉS gombbal vizsgálhatjuk meg, hogy létre jött-e a virtuális mappa, vagy sem. Ekkor elküldünk egy kérést a Sample.htm erőforrásra, és amennyiben a kérés nem okoz hibát, betöltjük a lapot az IE kontrolba.
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
...
axWebBrowser1.Navigate(url,ref o,ref o,ref o,ref o);
A böngészőkontrol Navigate metódusát használjuk a betöltésre. Hiba esetén egy üres lapot (about:blank) töltünk be a kontrolba.
axWebBrowser1.Navigate("about:blank",ref o,ref o,ref o,ref o);
Virtuális mappa létrehozása
Mivel a Sample mappa a Script-el azonos mappában található, elegendő a következőképpen megadnunk az elérési útvonalat:
var path = ".\\Sample"
Példányosítjuk a FileSystemObject objektumot, hogy a fizikai mappa tulajdonságait elérhessük.
var fso = new ActiveXObject("Scripting.FileSystemObject");
Elérhetjük egy objektum segítségével az IIS Web-szerver gyökérmappáját, melyben a létrehozott virtuális mappák vannak.
objIIS = GetObject("IIS://localhost/W3SVC/1/Root");
A GetFolder metódussal objektummá alakítjuk a fenti elérési útvonalat:
dirPath = fso.GetFolder(path).Path;
Sample néven bejegyzünk egy virtuális mappát, mely majd a fizikai mappánkra mutat.
dirObj = objIIS.Create("IISWebVirtualDir","Sample");
Ezt követően megadjuk a mappa legfontosabb jellemzőit. A fizika elérési utat:
dirObj.Path = dirPath;
Beállítjuk a hozzáférési lehetőségeket.
dirObj.AccessRead = true;
dirObj.AccessWrite = true;
dirObj.AccessScript = true;
dirObj.AccessExecute = true;
Engedélyezzük a névtelen hozzáférést.
dirObj.AuthAnonymous = true;
Elkészítjük a bejegyzést.
dirObj.AppCreate(true);
Majd elmentjük a változásokat.
dirObj.SetInfo();
A mappa létrejöttét ellenőrizhetjük az IIS Web-szerver adminisztrációs programjában is.
A Felügyeleti eszközökben indítsuk el az Internet Information Services alkalmazást, és keressük meg az alapértelmezett webhely csomópontjában a Sample mappát.
Virtuális mappa törlése
A mappa törlése előtt megvizsgáljuk, hogy létezik-e a virtuális könyvtár. Ekkor hozzáfűzzük a gyökérhez a mappa nevét.
objIIS = GetObject("IIS://localhost/W3SVC/1/Root/" + path);
Ha a művelet nem okozott hibát, akkor a mappa létezik, és eltávolítható. Ekkor elérjük a gyökérmappát, majd töröljük azt a Delete metódussal.
objIIS = GetObject("IIS://localhost/W3SVC/1/Root");
objIIS.Delete("IISWebVirtualDir","Sample");