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();
        }
    }
}

 

posted @ 2012-04-09 10:41  大约  阅读(2005)  评论(0编辑  收藏  举报