如题!

解决方案 »

  1.   

    在Visual C++中使用ADSI,需要#include 
    activeds.h,连接activeds.lib和adsiid.lib库文件,并要使用Unicode字符串。
    这个例子是使用VC在默认Web站点建立的虚拟目录。
    */
    ///////////////////////////////////////////////
    // CreateVirtualDirection参数说明
    // lpszVirtualDirName需要建立的虚拟目录的目录名字
    // lpszDiskPath 需要建立虚拟目录的本地磁盘目录
    //////////////////////////////////////////////BOOL CreateVirtualDirection(LPCTSTR lpszVirtualDirName,LPCTSTR lpszDiskPath)
    {
    IADsContainer* iContainer;
    IADs* iAds;
    /* 获得WebSever */
    if(ADsGetObject(L"IIS://localhost/w3svc",IID_IADsContainer,(void**)&iContainer)==S_OK)
    {
    //等到默认站点
    iContainer->GetObject(_bstr_t("IIsWebServer"), 
    _bstr_t("1"),(IDispatch**)&iAds);
    if(iAds->QueryInterface(IID_IADsContainer,(void**)&iContainer)==S_OK)
    {
    //得到默认站点的根目录
    iContainer->GetObject(_bstr_t("IIsWebVirtualDir"),_bstr_t("Root"),(IDispatch**)&iAds);
    //获得访问虚拟目录
    if(iAds->QueryInterface(IID_IADsContainer,(void**)&iContainer)==S_OK)
    {
    //先删除了虚拟目录
    iContainer->Delete(_bstr_t("IIsWebVirtualDir"), 
    _bstr_t(lpszVirtualDirName));
    //建立虚拟目录
    if(iContainer->Create(_bstr_t("IIsWebVirtualDir"), 
    _bstr_t(lpszVirtualDirName),(IDispatch**)&iAds)==S_OK)
    {
    //设置虚拟目录的属性
    iAds->Put(_bstr_t("AccessRead"),_variant_t("True"));//注意跟VB中的设置属性比较
    iAds->Put(_bstr_t("AccessWrite"),_variant_t("True"));
    iAds->Put(_bstr_t("Path"),_variant_t(lpszDiskPath));
    iAds->SetInfo();
    iAds->Release();
    iAds->Release();
    iContainer->Release();
    iContainer->Release();
    return TRUE;
    }
    else
    {
    iAds->Release();
    iAds->Release();
    iContainer->Release();
    iContainer->Release();
    return FALSE;
    }
    }
    else
    {
    iAds->Release();
    iContainer->Release();
    }
    }
    else
    {
    iAds->Release();
    }
    iContainer->Release();
    }
    return FALSE;
    }
    //使用VC需要初始化COM环境,别忘了APP类的InitInstance中AfxOleInit()函数的调用哦。
    //refer to http://seesi.top263.net/article/adsiiis.htm
    #include <Iads.h>
    #include <Adshlp.h>
    #include <activeds.h>
    #pragma comment(lib,"ActiveDS.lib")
    #pragma comment(lib,"adsiid.lib")
      

  2.   

    bool CW3SvcAgent::CreateWebServer(LPCTSTR lpszBindAddress,
      LPCTSTR lpszDomain,
      LPCTSTR lpszPathName)
    {
    if(lpszBindAddress==NULL||NULL==lpszDomain||NULL==lpszPathName)
    return false; DeleteWebServer(); IADsContainer *pCont=NULL;
    IADs* pAds=NULL;
    IADs* pVrAds=NULL;
    IADsServiceOperations *pSrvOp=NULL;
    IDispatch *pDisp = NULL;
    IDispatch *pVrDisp = NULL; _bstr_t WNumer = "1";
    int iNumer = 1;
    char szTemp[16] = {0}; _bstr_t newBindings=_bstr_t(lpszBindAddress)+":"+lpszDomain;
    HRESULT hr;
    bool bRet = false; if(ADsGetObject(L"IIS://localhost/w3svc",IID_IADsContainer,(void**)&pCont)==S_OK)
    {   
    while(pCont->GetObject(L"IIsWebServer",WNumer,&pDisp) == S_OK)
    {
    iNumer++;
    itoa(iNumer, szTemp, 10);
    WNumer = szTemp;
    }

    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(SERVERCOMMENT)));
    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(false));
    pVrAds->Put(L"AccessScript",_variant_t(true));
    pVrAds->Put(L"EnableDirBrowsing",_variant_t(false));
    pVrAds->Put(L"EnableDefaultDoc",_variant_t(true));
    pVrAds->Put(L"Path",_variant_t(lpszPathName));
    pVrAds->Put(L"AppRoot",_variant_t(lpszPathName));
    pVrAds->SetInfo(); DISPID dispid;

    LPWSTR szDispName = L"AppCreate2";
    HRESULT hresult = pVrAds->GetIDsOfNames(IID_NULL,&szDispName,1,
    LOCALE_SYSTEM_DEFAULT,&dispid);
    if(hresult == S_OK)
    {
    DISPPARAMS par;
    VARIANTARG vName;
    VariantInit(&vName);

    vName.vt = VT_BOOL;
    vName.boolVal = false;

    par.cArgs = 1;
    par.rgvarg = &vName;
    par.cNamedArgs = 0;
    par.rgdispidNamedArgs = NULL;



    hresult = pVrAds->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,
    DISPATCH_METHOD,&par,NULL, NULL,NULL);
    DWORD dwError = ::GetLastError();
    } pVrAds->Release();
    pAds->Release();
    pCont->Release(); }
    hr=pSrvOp->Start();
    hr=pSrvOp->Release();
    bRet = true;
    }
    }
    }
    return bRet;
    }