【问题标题】:How to I obtain an IIS Virtual DIrectory name from an IIS metabase path in c++如何从 C++ 中的 IIS 元数据库路径获取 IIS 虚拟目录名称
【发布时间】:2011-06-10 06:12:42
【问题描述】:

我有以下元数据库路径:

/lm/w3svc/1/root/foo

我可以在 IIS 管理器中看到映射到虚拟目录:

Default Web Site/foo

如何在 c++ 中从元数据库路径中确定虚拟目录名称?

【问题讨论】:

  • 如果您已经知道元数据库路径,那么虚拟目录将为 foo。也许我错过了什么?
  • 是的,我不知道虚拟目录的完整路径,类似于:“默认网站/foo”。仅当有人没有将“默认网站”重命名为其他名称时。无论如何,我找到了一个解决方案,您需要从元数据库中查询服务器评论字段的键“/lm/w3svc/1”以找到默认网站的名称。

标签: c++ iis iis-7 iis-6 metabase


【解决方案1】:
HRESULT CAeXMSAdminBasePtr::GetVirtualDirectoryName( LPCWSTR szMetaPath, LPWSTR  szVirtualDirectoryName, DWORD dwVirtualDirectoryNameLen )
{
    HRESULT hr = S_OK;
    METADATA_RECORD mdRecord;   
    memset(&mdRecord, 0, sizeof(METADATA_RECORD));

    METADATA_HANDLE hMetaData = NULL;
    IMSAdminBasePtr spAdminBase

    try
    {

        spAdminBase.CoCreateInstance(CLSID_MSAdminBase);

        spAdminBase->OpenKey(METADATA_MASTER_ROOT_HANDLE, szMetaPath, METADATA_PERMISSION_READ, g_dwCommandTimeOut, hMetaData);

        //
        // Get Server Comment field aka Web Site Name
        //
        MD_SET_DATA_RECORD(&mdRecord, MD_SERVER_COMMENT, METADATA_NO_ATTRIBUTES, IIS_MD_UT_SERVER, ALL_METADATA , dwVirtualDirectoryNameLen*sizeof(WCHAR), szVirtualDirectoryName );
        spAdminBase->GetData(hMetaData, L"", mdRecord, dwVirtualDirectoryNameLen ); 
        if( hMetaData != NULL )
        {
            spAdminBase->CloseKey(hMetaData);
        }
    }
    catch(...)
    {
        hr = E_FAIL;
        if( hMetaData != NULL )
        {
            spAdminBase->CloseKey(hMetaData);
        }
        // Propogate exception to caller
        throw;
    }

    return hr;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2011-02-12
    • 1970-01-01
    • 2011-11-28
    • 2011-09-19
    • 2010-10-11
    相关资源
    最近更新 更多