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(); } } } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步