如何编程创建一个iis 下web的虚拟目录? 如题! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在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") 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;} 请教CLSIDFromProgID的问题 关于编辑框的背景色 在子进程关闭主进程的对话框 怎样获得CEdit的值并将其转换为double 为震灾祈福,散分100! 编辑框的简单问题 小问题一个,希望大家能帮我看看 程序员成长最危险的时刻(怎样成为优秀的软件人才)!? 求教! 关于输出日期出错:function call missing argument list??? 通过ADSI管理IIS,如何将创建的虚拟目录改成应用程序? 利用VC++获取IIS中的配置信息
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")
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;
}