赞
踩
由于IIS6与IIS7以后的编程接口更改,导致IIS6的项目无法访问IIS7,研究了几天时间,终于有些眉目,现在记录如下。
首先需要说明如下问题:
1.iis7以后的版本不再支持nntp (http://forums.iis.net/t/1160175.aspx这个页面有明显说明)
2.如果要使用smtp需要系统安装iis6兼容组件
3.如果要使用iis6的接口来访问iis7的信息需要安装iis6兼容组件
网络上很多关于IIS6的编程接口应用,现只说明C/C++编程操作IIS7的方法。详细的操作方式及说明,可以查看微软的在线MSDN(msdn.microsoft.com)
- #include <stdio.h>
- #include <string.h>
- #include <ahadmin.h>
- #include <tchar.h>
-
-
- HRESULT ListSiteInfo(IAppHostElementCollection *pSitesCollection)
- {
- HRESULT hr;
- DWORD iCount;
- DWORD jCount;
- DWORD kCount;
- VARIANT vtCount;
- VARIANT vtPropertyName;
- VARIANT value;
- BSTR bstrPropValue = NULL;
- BSTR bstrIdPropValue = NULL;
- IAppHostElement *site = NULL;
- IAppHostElement *appPath = NULL;
- IAppHostElement *dirPath = NULL;
- IAppHostProperty *prop = NULL;
- IAppHostPropertyCollection * pElemProps = NULL;
- IAppHostElementCollection *pAppPathCollection = NULL;
- IAppHostElementCollection *pVirtualPathCollection = NULL;
- BSTR bstrSiteName = SysAllocString(L"name");
- BSTR bstrSiteId = SysAllocString(L"id");
- BSTR bstrSiteRootPath = SysAllocString( L"path" );
- BSTR bstrAppRootPath = SysAllocString( L"application" );
- BSTR bstrVirtualDirPath = SysAllocString(L"virtualDirectory");
- BSTR bstrPhysicalPath = SysAllocString(L"physicalPath");
-
-
- hr = pSitesCollection->get_Count(&iCount);
- if (FAILED(hr))
- {
- printf("ERROR: Unable to get site count.\n");
- goto _END;
- }
- //依次列举每个site的信息
- for (DWORD i = 0; i < iCount; i++)
- {
- VariantInit(&vtCount);
- vtCount.lVal = i;
- vtCount.vt = VT_I4;
- hr = pSitesCollection->get_Item(vtCount, &site);
- if (FAILED(hr))
- {
- goto _END;
- }
-
-
- //获取site的属性
- hr = site->GetPropertyByName(bstrSiteName, &prop);
- if (FAILED(hr))
- {
- goto _END;
- }
- hr = prop->get_StringValue(&bstrPropValue);
- if (FAILED(hr))
- {
- goto _END;
- }
- prop->Release();
- prop = NULL;
- hr = site->GetPropertyByName(bstrSiteId, &prop);
- if (FAILED(hr))
- {
- goto _END;
- }
- hr = prop->get_Value(&value);
- if (FAILED(hr))
- {
- goto _END;
- }
- _tprintf(_T("Site name : %s, id : %d\n"), bstrPropValue, value.lVal);
- SysFreeString(bstrPropValue);
- bstrPropValue = NULL;
- prop->Release();
- prop = NULL;
-
-
- //获取site的下层
- hr = site->get_Collection(&pAppPathCollection);
- if (FAILED(hr))
- {
- goto _END;
- }
- hr = pAppPathCollection->get_Count(&jCount);
- if (FAILED(hr))
- {
- goto _END;
- }
- for (DWORD j = 0; j < jCount; j++)
- {
- VariantInit(&vtCount);
- vtCount.lVal = j;
- vtCount.vt = VT_I4;
- hr = pAppPathCollection->get_Item(vtCount, &appPath);
- if (FAILED(hr))
- {
- goto _END;
- }
-
-
- hr = appPath->get_Collection(&pVirtualPathCollection);
- if (FAILED(hr))
- {
- goto _END;
- }
- hr = pVirtualPathCollection->get_Count(&kCount);
- if (FAILED(hr))
- {
- goto _END;
- }
- for (DWORD k = 0; k < kCount; k++)
- {
- VariantInit(&vtCount);
- vtCount.lVal = k;
- vtCount.vt = VT_I4;
- hr = pVirtualPathCollection->get_Item(vtCount, &dirPath);
- if (FAILED(hr))
- {
- goto _END;
- }
- hr = dirPath->GetPropertyByName(bstrSiteRootPath, &prop);
- if (FAILED(hr))
- {
- goto _END;
- }
- hr = prop->get_StringValue(&bstrPropValue);
- if (FAILED(hr))
- {
- goto _END;
- }
- _tprintf(_T("Site root path:%s\n"), bstrPropValue);
- hr = dirPath->GetPropertyByName(bstrPhysicalPath, &prop);
- if (FAILED(hr))
- {
- goto _END;
- }
- hr = prop->get_StringValue(&bstrPropValue);
- if (FAILED(hr))
- {
- goto _END;
- }
- _tprintf(_T("Site phyical path:%s\n"), bstrPropValue);
- SysFreeString(bstrPropValue);
- bstrPropValue = NULL;
- prop->Release();
- prop = NULL;
- dirPath->Release();
- dirPath = NULL;
- }
- pVirtualPathCollection->Release();
- pVirtualPathCollection = NULL;
- appPath->Release();
- appPath = NULL;
- }
- pAppPathCollection->Release();
- pAppPathCollection = NULL;
- site->Release();
- site = NULL;
- }
- _END:
- if (NULL != bstrPropValue)
- {
- SysFreeString(bstrPropValue);
- }
- if (NULL != prop)
- {
- prop->Release();
- }
- if (NULL != dirPath)
- {
- dirPath->Release();
- }
- if (NULL != pVirtualPathCollection)
- {
- pVirtualPathCollection->Release();
- }
- if (NULL != appPath)
- {
- appPath->Release();
- }
- if (NULL != pAppPathCollection)
- {
- pAppPathCollection->Release();
- }
- if (NULL != site)
- {
- site->Release();
- }
- SysFreeString(bstrSiteName);
- SysFreeString(bstrSiteId);
- SysFreeString(bstrSiteRootPath);
- SysFreeString(bstrAppRootPath);
- SysFreeString(bstrVirtualDirPath);
- SysFreeString(bstrPhysicalPath);
- return hr;
- }
-
-
- int main(int argc, char **argv)
- {
- HRESULT hr = S_OK;
- IAppHostWritableAdminManager *pMgr = NULL;
- IAppHostElement *pElem = NULL;
- IAppHostElementCollection *pSitesCollection = NULL;
- BSTR bstrMetadataName = SysAllocString( L"system.applicationHost/sites" );
- BSTR bstrConfigCommitPath = SysAllocString( L"MACHINE/WEBROOT/APPHOST" );
-
-
- printf("Press any key to continue...");
- getchar();
-
-
- // Initialize
- hr = CoInitializeEx( NULL, COINIT_MULTITHREADED );
- if ( FAILED( hr ) )
- {
- printf_s( "ERROR: Unable to initialize\n" );
- goto _OUT;
- }
-
-
- // Create
- hr = CoCreateInstance( __uuidof( AppHostWritableAdminManager ), NULL,
- CLSCTX_INPROC_SERVER,
- __uuidof( IAppHostWritableAdminManager ), (void**) &pMgr );
- if( FAILED( hr ) )
- {
- printf_s( "ERROR: Unable to create an IAppHostAdminManager instance\n" );
- goto _OUT;
- }
-
-
- hr = pMgr->GetAdminSection(bstrMetadataName, bstrConfigCommitPath, &pElem);
- if ( FAILED( hr ) )
- {
- printf("ERROR: Unable to get admin section.\n");
- goto _OUT;
- }
-
-
- hr = pElem->get_Collection(&pSitesCollection);
- if ( FAILED( hr ) )
- {
- printf("ERROR: Unable to get sites collection.\n");
- goto _OUT;
- }
-
-
- hr = ListSiteInfo(pSitesCollection);
-
-
- _OUT:
- if (NULL != pSitesCollection)
- {
- pSitesCollection->Release();
- }
- if (NULL != pElem)
- {
- pElem->Release();
- }
- if ( pMgr != NULL )
- {
- pMgr->Release();
- }
- SysFreeString( bstrMetadataName );
- CoUninitialize();
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。