VC,C#创建IIS站点,应用程序池 ADSI
#include <windows.h> #include <Iads.h> #include <comdef.h> #include <tchar.h> #include <stdio.h> #include <Adshlp.h> #pragma comment(lib,"ActiveDS") #pragma comment(lib,"adsiid") #include <iiisext.h> #include <iisext_i.c> BOOL CreateWebServer(LPCTSTR bindaddress, LPCTSTR domain, LPCTSTR DiskPath); void main() { CoInitialize(NULL); if(TRUE == CreateWebServer(_T("192.168.105.119:80"), _T("auto"), _T("D:\\release")))/*D:\\sample\\website\\website*/ printf("create site ok/n"); else printf("create site failed/n"); CoUninitialize(); system("pause"); } BOOL CreateWebServer(LPCTSTR bindaddress, LPCTSTR domain, LPCTSTR pathname) { if(bindaddress == NULL || NULL == domain || NULL == pathname) return FALSE; IADsContainer *pCont = NULL; IADs *pAds = NULL; IADs *pVrAds = NULL; IADsServiceOperations *pSrvOp = NULL; IDispatch *pDisp = NULL; IDispatch *pVrDisp = NULL; _bstr_t WNumer = "123"; _bstr_t newBindings = _bstr_t(bindaddress) + ":" + ""; // _bstr_t newBindings = _bstr_t(bindaddress) + ":" + domain; HRESULT hr; if(ADsGetObject(L"IIS://localhost/w3svc", IID_IADsContainer, (void **)&pCont) == S_OK) { if(pCont->Create(L"IIsWebServer",WNumer, &pDisp) == S_OK) { hr = pDisp->QueryInterface(IID_IADs, (void **)&pAds); hr = pDisp->QueryInterface(IID_IADsServiceOperations, (void **)&pSrvOp); pAds->Put(L"ServerSize", _variant_t(long(1))); pAds->Put(L"ServerComment", _variant_t(_bstr_t("auto"))); pAds->Put(L"ServerBindings", _variant_t(newBindings)); pAds->SetInfo(); hr = pCont->GetObject(L"IIsWebServer", (WNumer), &pDisp); if(pDisp->QueryInterface(IID_IADsContainer, (void **)&pCont) == S_OK) { if(pCont->Create(L"IIsWebVirtualDir", L"Root", &pVrDisp) == S_OK) { hr = pVrDisp->QueryInterface(IID_IADs, (void **)&pVrAds); pVrAds->Put(L"AccessRead", _variant_t(true)); //pVrAds->Put(L"AccessWrite", _variant_t(true)); //pVrAds->Put(L"AccessScript", _variant_t(true)); //pVrAds->Put(L"EnableDirBrowsing", _variant_t(true)); pVrAds->Put(L"AccessExecute", _variant_t(true)); pVrAds->Put(L"Path", _variant_t(pathname)); pVrAds->Put(L"AppRoot", _variant_t(pathname)); pVrAds->Put(L"DefaultDoc", _variant_t("index.htm,index.aspx")); pVrAds->Put(_bstr_t("AppFriendlyName"),_variant_t("auto")); pVrAds->SetInfo(); pVrAds->Release(); pAds->Release(); pCont->Release(); } IADs *pADs = NULL; hr = ADsGetObject( L"IIS://localhost/w3svc/123/root", IID_IADs, (void **)&pADs ); IISApp2 *pApp2 = NULL; hr = pADs->QueryInterface( IID_IISApp2, (void **)&pApp2 ); IISApp3 *pApp3 = NULL; hr = pADs->QueryInterface( IID_IISApp3, (void **)&pApp3 ); VARIANT varPool; VariantInit( &varPool ); varPool.vt = VT_BSTR; varPool.bstrVal = SysAllocString( L"MyAppPool" ); VARIANT varCreatePool; VariantInit( &varCreatePool ); varCreatePool.vt = VT_BOOL; varCreatePool.boolVal = VARIANT_TRUE; hr = pApp3->AppCreate3(2, varPool, varCreatePool ); if ( pApp3 ) pApp3->Release(); if ( pADs ) pADs->Release(); hr = pSrvOp->Start(); hr = pSrvOp->Release(); } } } IADs *pool = NULL; hr = ADsGetObject( L"IIS://localhost/W3SVC/AppPools/MyAppPool", IID_IADs, (void **)&pool ); IISApplicationPool *applicationPool = NULL; hr = pool->QueryInterface(IID_IISApplicationPool,(void **)&applicationPool ); if(hr==S_OK) { applicationPool->Stop(); applicationPool->Recycle(); applicationPool->Start(); printf("start current application pool"); } return true; }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.DirectoryServices; namespace test { class Program { const string W3SVC_PATH = "IIS://localhost/W3SVC"; // Access Flags const int MD_ACCESS_READ = 0x00000001; //Allow read access. const int MD_ACCESS_SCRIPT = 0x00000200; // Allow script execution. static void Main(string[] args) { CreateWebSite("xxxxxx","d:\\release"); Console.WriteLine("ok"); Console.Read(); } public static void CreateWebSite(string siteName, string realPath) { if (string.IsNullOrEmpty(siteName)) { throw new NullReferenceException("创建站点的站点名字不能为空"); } if (string.IsNullOrEmpty(realPath)) { throw new NullReferenceException("创建站点的站点真是路径不能为空"); } DirectoryEntry root = new DirectoryEntry(W3SVC_PATH); //判断站点是否已经存在,如果存在,则删除已有站点 int siteID = GetSiteID(siteName, "localhost"); if (siteID > 0) { throw new Exception("要创建的站点已经存在"); } siteID = getNewWebSiteID(); DirectoryEntry currentWeb = root.Children.Add(siteID.ToString(), "IIsWebServer"); currentWeb.CommitChanges(); //currentWeb.Properties["Location"].Value = "/LM/W3SVC/" + siteID.ToString(); currentWeb.Properties["AuthFlags"][0] = "0"; currentWeb.Properties["MaxBandwidth"][0] = "1048576"; currentWeb.Properties["MaxConnections"][0] = "10"; currentWeb.Properties["ServerAutoStart"][0] = "true"; currentWeb.Properties["ServerBindings"].Value = ":80:";// + siteName; currentWeb.Properties["ServerComment"][0] = siteName; // 添加web虚拟目录 DirectoryEntry virEntry = currentWeb.Children.Add("root", "IIsWebVirtualDir"); virEntry.CommitChanges(); //virEntry.Properties["Location"].Value = "/LM/W3SVC/"+siteID.ToString()+"/root"; virEntry.Properties["AccessFlags"][0] = MD_ACCESS_READ | MD_ACCESS_SCRIPT; virEntry.Properties["AppFriendlyName"][0] = siteName; virEntry.Properties["AppIsolated"][0] = "2"; virEntry.Properties["AppRoot"][0] = "/LM/W3SVC/" + siteID.ToString() + "/Root"; virEntry.Properties["AuthFlags"][0] = 1 | 7;// 设置目录的安全性,0表示不允许匿名访问,1为允许,3为基本身份验证,7为windows继承身份验证 virEntry.Properties["Path"][0] = realPath; //虚拟目录物理路径 //virEntry.Properties["AccessExecute"][0] = true; virEntry.Properties["DefaultDoc"][0] = "index.aspx,index.htm"; virEntry.CommitChanges(); currentWeb.CommitChanges(); virEntry.Close(); currentWeb.Close(); root.Close(); } public static int GetSiteID(string webSiteName, string serverIP) { int SiteID = 0; try { DirectoryEntry root = new DirectoryEntry(@"IIS://" + serverIP + "/W3SVC"); foreach (DirectoryEntry Child in root.Children) { string WName = Child.Properties["ServerComment"][0].ToString(); if (webSiteName == WName) { SiteID = Convert.ToInt32(Child.Name); return SiteID; } WName = ""; } } catch { SiteID = 0; } return SiteID; } public static int getNewWebSiteID() { using (System.DirectoryServices.DirectoryEntry rootEntry = new System.DirectoryServices.DirectoryEntry(W3SVC_PATH)) { int siteID = 1; //得到现有的站点标识 foreach (System.DirectoryServices.DirectoryEntry entry in rootEntry.Children) { if (entry.SchemaClassName == "IIsWebServer") { int ID = Convert.ToInt32(entry.Name); if (ID >= siteID) { siteID = ID + 1; } } } rootEntry.Close(); return siteID; } } public static void CreateNewWebSite(string hostName) { //if (!EnsureNewSiteEnavaible(siteInfo.BindString)) //{ // throw new DuplicatedWebSiteException("已经有了这样的网站了。" + Environment.NewLine + siteInfo.BindString); //} string entPath = String.Format("IIS://{0}/w3svc", hostName); DirectoryEntry rootEntry =new DirectoryEntry(entPath); string newSiteNum = "135"; DirectoryEntry newSiteEntry = rootEntry.Children.Add(newSiteNum, "IIsWebServer"); newSiteEntry.CommitChanges(); newSiteEntry.Properties["ServerBindings"].Value = "192.168.105.119:80:" + ""; newSiteEntry.Properties["ServerComment"].Value = "testwetsite"; newSiteEntry.CommitChanges(); DirectoryEntry vdEntry = newSiteEntry.Children.Add("root", "IIsWebVirtualDir"); vdEntry.CommitChanges(); vdEntry.Properties["Path"].Value = "d:/release"; vdEntry.CommitChanges(); } //DirectoryEntry appPool = new DirectoryEntry("IIS://localhost/W3SVC/AppPools"); //createAppPool("Abcxxx"); //foreach (DirectoryEntry a in appPool.Children) //{ // Console.WriteLine(a.Name); //} //DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC"); //foreach (DirectoryEntry dir in root.Children) //{ // if (dir.SchemaClassName == "IIsWebServer") // { // string ww = dir.Properties["ServerComment"].Value.ToString(); // Console.WriteLine(string.Format("IIS://localhost/W3SVC/{0}/ROOT/;{1}", dir.Name, ww)); // } //} //using (DirectoryEntry root = new DirectoryEntry("WinNT:")) //{ // foreach (DirectoryEntry domain in root.Children) // { // Console.WriteLine("Domain | WorkGroup:\t" + domain.Name); // foreach (DirectoryEntry computer in domain.Children) // { // Console.WriteLine("Computer:\t" + computer.Name); // } // } //} //Console.ReadLine(); static void createAppPool(string AppPoolName) { DirectoryEntry newpool; DirectoryEntry apppools = new DirectoryEntry("IIS://localhost/W3SVC/AppPools"); newpool = apppools.Children.Add(AppPoolName, "IIsApplicationPool"); newpool.CommitChanges(); } } }