在VC中如何控制IIS,也就怎样使用程序来控制IIS的所有配置!

解决方案 »

  1.   

    在本地建个文件夹,在IIS中配制,选个文件夹,
      

  2.   

    操作注册表吧,改变IIS的设置,并用软件监视注册表的变化。然后用你的程序来修改注册表,达到目的。
      

  3.   

    要用到ADSI啦。。你查一下msdn
      

  4.   

    MSDN->Plateform SDK->Internet/Intranet/Extranet services->Internet information server
      

  5.   

    CIISAdminBase::CIISAdminBase()
    { HRESULT hRes = 0;
    ::CoInitialize(NULL);
    hRes = CoCreateInstance(CLSID_MSAdminBase, NULL, CLSCTX_ALL, IID_IMSAdminBase, &m_pIMetabase);

    if(FAILED(hRes)) 
    {
    WriteLogFile("Can't create instance - CIISAdminBase create");
    m_pIMetabase = NULL;
    }
    }CIISAdminBase::~CIISAdminBase()
    {
    // Destroy the object
    if(m_pIMetabase) 
    {
    ((IUnknown *) m_pIMetabase)->Release();
    m_pIMetabase = NULL;
    }
    ::CoUninitialize();
    }//////////////////////////////////////////////////////////////////////
    // WWW Site operationsBOOL CIISAdminBase::StartWebSite()
    {
    BOOL bRet = SetServerStatus();
    if(!bRet)
    WriteLogFile("Can't start web site");
    return bRet;
    }BOOL CIISAdminBase::StopWebSite()
    {
    BOOL bRet = SetServerStatus(FALSE);
    if(!bRet)
    WriteLogFile("Can't stop web site");
    return bRet;
    }BOOL CIISAdminBase::AddWebSite(CString strSiteName, CString strSitePath, DWORD dwAccessFlag)
    {
    BOOL bRet = CreateSite(strSiteName, "/LM/W3SVC/1/ROOT", strSitePath, dwAccessFlag);
    if(!bRet)
    WriteLogFile("Can't create web site: " + strSiteName);
    return bRet;
    }BOOL CIISAdminBase::KillWebSite(const CString &strSiteName)
    {
    if(!m_pIMetabase) return FALSE;

    HRESULT hRes = 0;
    METADATA_HANDLE hRoot;
    CIISPtr ptrIIS((IMSAdminBase *)m_pIMetabase);    // Prepare BSTRs
    CComBSTR bstrSiteName = "/1/ROOT/" + strSiteName;
    CComBSTR bstrSiteRoot = "/LM/W3SVC"; // Open metabase key
        hRes = ptrIIS->OpenKey(METADATA_MASTER_ROOT_HANDLE, bstrSiteRoot, 
    METADATA_PERMISSION_WRITE, 20, &hRoot);
    if(FAILED(hRes)) return FALSE;

    // Delete a key
    hRes = ptrIIS->DeleteKey(hRoot, bstrSiteName);
    if(FAILED(hRes) && HRESULT_CODE(hRes) != ERROR_PATH_NOT_FOUND) return FALSE;

    ptrIIS->CloseKey(hRoot);
    return TRUE;
    }
      

  6.   

    继续
    BOOL CIISAdminBase::CreateSite(CString strSiteName, CString strSiteVDir, 
       CString strSiteDir, DWORD dwAccessFlag)
    {
    if(!m_pIMetabase) return FALSE;

    HRESULT hRes = 0;
    METADATA_HANDLE hRoot;
    METADATA_RECORD metaRecord;
    CIISPtr ptrIIS((IMSAdminBase *)m_pIMetabase);    // Prepare BSTRs
    CComBSTR bstrSiteName = strSiteName;
    CComBSTR bstrSiteVDir = strSiteVDir;
    CComBSTR bstrSiteVName = "" + strSiteName;
    CComBSTR bstrSiteDir = strSiteDir;
    // Open metabase key
        hRes = ptrIIS->OpenKey(METADATA_MASTER_ROOT_HANDLE, bstrSiteVDir, 
    METADATA_PERMISSION_READ | METADATA_PERMISSION_WRITE, 20, &hRoot);
    if(FAILED(hRes)) 
    {
    WriteLogFile("Can't open metabase key: " + strSiteVDir);
    return FALSE;
    }

    // Add a key
    hRes = ptrIIS->AddKey(hRoot, bstrSiteVName);
    if(FAILED(hRes) && HRESULT_CODE(hRes) != ERROR_ALREADY_EXISTS) 
    {
    WriteLogFile("Can't add key to metabase: /" + strSiteName);
    return FALSE;
    } ///////////////////////////////////////////////////////////
    // Set Site Properties
    // Key type
    CComBSTR bstrKeyType("IIsWebVirtualDir");
    ZeroMemory(&metaRecord, sizeof(metaRecord));
    metaRecord.dwMDDataType = STRING_METADATA;
    metaRecord.dwMDIdentifier = MD_KEY_TYPE;
    metaRecord.dwMDUserType = IIS_MD_UT_SERVER;
    metaRecord.pbMDData = (unsigned char *)(unsigned short*)bstrKeyType;
    metaRecord.dwMDDataLen = bstrKeyType.Length() * 2 + 3;
    hRes = ptrIIS->SetData(hRoot, bstrSiteVName, &metaRecord);
    if(FAILED(hRes)) 
    {
    WriteLogFile("Can't set data for Key type:IIsWebVirtualDir");
    return FALSE;
    } // Friendly name
    ZeroMemory(&metaRecord, sizeof(metaRecord));
    metaRecord.dwMDDataType = STRING_METADATA;
    metaRecord.dwMDIdentifier = MD_APP_FRIENDLY_NAME;
    metaRecord.dwMDUserType = IIS_MD_UT_WAM;
    metaRecord.pbMDData = (unsigned char *)(unsigned short*)bstrSiteName;
    metaRecord.dwMDDataLen = bstrSiteName.Length() * 2 + 3;
    hRes = ptrIIS->SetData(hRoot, bstrSiteVName, &metaRecord);
    if(FAILED(hRes)) 
    {
    WriteLogFile("Can't set data for Friendly name");
    return FALSE;
    } // App Root Path
    CComBSTR bstrSiteRoot = strSiteVDir + "/" + strSiteName;
    ZeroMemory(&metaRecord, sizeof(metaRecord));
    metaRecord.dwMDAttributes = METADATA_INHERIT;
    metaRecord.dwMDDataType = STRING_METADATA;
    metaRecord.dwMDIdentifier = MD_APP_ROOT;
    metaRecord.dwMDUserType = IIS_MD_UT_FILE;
    metaRecord.pbMDData = (unsigned char *)(unsigned short*)bstrSiteRoot;
    metaRecord.dwMDDataLen = bstrSiteRoot.Length() * 2 + 3;
    hRes = ptrIIS->SetData(hRoot, bstrSiteVName, &metaRecord);
    if(FAILED(hRes)) 
    {
    WriteLogFile("Can't set data for App Root Path");
    return FALSE;
    } // Path
    ZeroMemory(&metaRecord, sizeof(metaRecord));
    metaRecord.dwMDAttributes = METADATA_INHERIT;
    metaRecord.dwMDDataType = STRING_METADATA;
    metaRecord.dwMDIdentifier = MD_VR_PATH;
    metaRecord.dwMDUserType = IIS_MD_UT_FILE;
    metaRecord.pbMDData = (unsigned char *)(unsigned short*)bstrSiteDir;
    metaRecord.dwMDDataLen = bstrSiteDir.Length() * 2 + 3;
    hRes = ptrIIS->SetData(hRoot, bstrSiteVName, &metaRecord);
    if(FAILED(hRes)) 
    {
    WriteLogFile("Can't set data for Path");
    return FALSE;
    } // Access Flag
    DWORD dwFlag = dwAccessFlag; //MD_ACCESS_READ | MD_ACCESS_EXECUTE | MD_ACCESS_SCRIPT;
    ZeroMemory(&metaRecord, sizeof(metaRecord));
    metaRecord.dwMDAttributes = METADATA_INHERIT;
    metaRecord.dwMDDataType = DWORD_METADATA;
    metaRecord.dwMDIdentifier = MD_ACCESS_PERM;
    metaRecord.dwMDUserType = IIS_MD_UT_FILE;
    metaRecord.pbMDData = (unsigned char *)&dwFlag;
    metaRecord.dwMDDataLen = sizeof(DWORD);
    hRes = ptrIIS->SetData(hRoot, bstrSiteVName, &metaRecord);
    if(FAILED(hRes)) 
    {
    WriteLogFile("Can't set data for Access Flag");
    return FALSE;
    } // Dir Browse Flag
    dwFlag = 1073741886;
    ZeroMemory(&metaRecord, sizeof(metaRecord));
    metaRecord.dwMDAttributes = METADATA_INHERIT;
    metaRecord.dwMDDataType = DWORD_METADATA;
    metaRecord.dwMDIdentifier = MD_DIRECTORY_BROWSING;
    metaRecord.dwMDUserType = IIS_MD_UT_FILE;
    metaRecord.pbMDData = (unsigned char *)&dwFlag;
    metaRecord.dwMDDataLen = sizeof(DWORD);
    hRes = ptrIIS->SetData(hRoot, bstrSiteVName, &metaRecord);
    if(FAILED(hRes)) 
    {
    WriteLogFile("Can't set data for Dir Browse Flag");
    return FALSE;
    } // App Isolate
    dwFlag = 2;
    ZeroMemory(&metaRecord, sizeof(metaRecord));
    metaRecord.dwMDAttributes = METADATA_INHERIT;
    metaRecord.dwMDDataType = DWORD_METADATA;
    metaRecord.dwMDIdentifier = MD_APP_ISOLATED;
    metaRecord.dwMDUserType = IIS_MD_UT_WAM;
    metaRecord.pbMDData = (unsigned char *)&dwFlag;
    metaRecord.dwMDDataLen = sizeof(DWORD);
    hRes = ptrIIS->SetData(hRoot, bstrSiteVName, &metaRecord);
    if(FAILED(hRes)) 
    {
    WriteLogFile("Can't set data for App Isolate");
    return FALSE;
    } // Site Properties complete, close the metabase key
    ptrIIS->CloseKey(hRoot); return TRUE;
    }
      

  7.   

    继续
    BOOL CIISAdminBase::SetServerStatus(BOOL bStart, BOOL bW3Site)
    {
    if(!m_pIMetabase) return FALSE;

    HRESULT hRes = 0;
    METADATA_HANDLE hRootW3;
    CIISPtr ptrIIS((IMSAdminBase *)m_pIMetabase);    // Open metabase key
    CComBSTR bstrSiteName;
    if(bW3Site) bstrSiteName = "/LM/W3SVC";
    else bstrSiteName = "/LM/MSFTPSVC/"; hRes = ptrIIS->OpenKey(METADATA_MASTER_ROOT_HANDLE, bstrSiteName, 
    METADATA_PERMISSION_READ | METADATA_PERMISSION_WRITE, 20, &hRootW3); 
    if(FAILED(hRes)) return FALSE; // Get metabase key data
    METADATA_RECORD metaRecord;
    DWORD dwBuffer;

    if(bStart) dwBuffer = MD_SERVER_COMMAND_START;
    else dwBuffer = MD_SERVER_COMMAND_STOP; ZeroMemory(&metaRecord, sizeof(metaRecord));
    metaRecord.dwMDIdentifier = MD_SERVER_COMMAND;
    metaRecord.dwMDAttributes = METADATA_INHERIT;
    metaRecord.dwMDUserType = IIS_MD_UT_SERVER;
    metaRecord.dwMDDataType = DWORD_METADATA;
    metaRecord.dwMDDataLen = sizeof(DWORD);
    metaRecord.pbMDData = (unsigned char*)&dwBuffer; hRes = ptrIIS->SetData(hRootW3, CComBSTR("/1"), &metaRecord);  if(FAILED(hRes)) return FALSE; ptrIIS->CloseKey(hRootW3);

    return TRUE;
    }
      

  8.   

    首先多谢fire_soft(fire_soft),如果搞定,这50分就是你的,如果不够跟我说,只要能学到东西,再多的分也无所谓,呵呵
      

  9.   

    fire_soft(fire_soft),可不可以给一些相关说明,这样看程序太累了?