当前位置: 主页 > 日志 > ISAPI/ADSI >

在VC中使用ADSI控制IIS

// by  redice 09.06.15
// redice@163.com
// www.redicecn.cn

    在VB中使用ADSI控制IIS要比VC简单许多。在“ 基于ADSI对IIS虚拟主机属性的读取和设置” 一文中就是使用VB实现的。有的时候由于项目需要,必须要在VC中来完成对IIS的操作,最近在一个VC项目中需要对IIS下所有的站点进行列举,并要获取它们的默认路径。经过一番辛苦的查询,最后终于在CodeProject上找到了解决方案(一个叫做easyiis的开源程序)。


 
// 枚举本地站点
void newtaskdlg::LoadSiteList()
{
    ::CoInitialize(NULL);  //初始化COM组件
    
    IADsContainer *pServer = NULL;

    HRESULT hr = ADsGetObject(L"IIS://localhost/w3svc",IID_IADsContainer, (void**)&pServer);
    if (!SUCCEEDED(hr))
    {
        AfxMessageBox("链接IIS失败! 是否安装了IIS? IIS服务是否启动?");
        return;
    }

    IEnumVARIANT *pEnum = NULL;
    hr = ADsBuildEnumerator(pServer, &pEnum );
    if (SUCCEEDED(hr))
    {
        _variant_t vSite;
        ULONG lFetch;
        IADs *pSite=NULL;

        while(SUCCEEDED(ADsEnumerateNextpEnum, 1, &vSite, &lFetch )) && lFetch == 1)
        {
            int item = 0;
            hr = V_DISPATCH(&vSite)->QueryInterface(IID_IADs, (void**&pSite);
            if (SUCCEEDED(hr))
            {
                BSTR bstrClass;

                pSite->get_Class(&bstrClass);

                if(strcmp(CString(bstrClass),"IIsWebServer")==0)
                {
                    _variant_t    var;
                    BSTR strBuf=NULL;

                    CString csSiteName// 站点id
                    pSite->get_Name(&strBuf);
                    csSiteName=strBuf;

                    CString csSiteComment// 站点描述
                    pSite->Get(L"ServerComment",&var);
                    csSiteComment = var.bstrVal;
                    
                                       
                    CString csSiteMemo;
                    csSiteMemo=csSiteComment + "(";
                    csSiteMemo+=csSiteName;
                    csSiteMemo+=")";
                    this->m_sitecombo.AddString(csSiteMemo.GetBuffer(0));
                }

                SysFreeString(bstrClass);
                pSite->Release();
                pSite = NULL;
            }
        }
    }
    else
    {
        AfxMessageBox("枚举IIS站点失败!");
    }

    if (pEnum)
    {
        ADsFreeEnumerator(pEnum);
    }

    pServer->Release();
    pServer = NULL
        
    ::CoUninitialize();   //结束COM调用   
}



// 根据SiteId获取站点日志路径
CString  GetSiteLogDir(CString csSiteId)
{
    CString csSiteLogDir;
    if(csSiteId.IsEmpty()) return csSiteLogDir;

    ::CoInitialize(NULL);  //初始化COM组件

    HRESULT hr;
    IADs *pSite=NULL;

    WCHAR AdsPath[1024]=L"IIS://localhost/w3svc/";
    wcscat(AdsPath,ConvertLPCSTRToLPWSTR(csSiteId.GetBuffer(0)));

    hr = ADsGetObject(AdsPath,IID_IADs,(void**)&pSite);
    if (SUCCEEDED(hr) )
    {
        _variant_t var;
        pSite->Get(L"LogFileDirectory",&var);
        csSiteLogDir=var.bstrVal;
    }

    ::CoUninitialize();   //结束COM调用  

    return csSiteLogDir;
}


关于IIS的还有很多操作,在easyiis源代码你可以找到这些问题的解决方案。

File: easyiis.zip

基于ADSI对IIS虚拟主机属性的读取和设置” (http://www.redicecn.cn/blogview.asp?Content_Id=173)

[日志信息]

该日志于 2009-06-15 09:22 由 redice 发表在 redice's Blog ,你除了可以发表评论外,还可以转载 “在VC中使用ADSI控制IIS” 日志到你的网站或博客,但是请保留源地址及作者信息,谢谢!!    (尊重他人劳动,你我共同努力)
   
验证(必填):   点击我更换验证码

redice's Blog  is powered by DedeCms |  Theme by Monkeii.Lee |  网站地图 |  本服务器由西安鲲之鹏网络信息技术有限公司友情提供

返回顶部