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 @   大约  阅读(2008)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示