您的位置:首页 > 运维架构 > 网站架构

IIS网站和虚拟目录动态创建源码

2018-02-05 11:05 453 查看
IIS网站和虚拟目录动态创建源码

ACL.CPP文件内容



#include "stdafx.h"
#include "acl.h"
#include "SetupKit.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

////////////////////////////////////////////////////////////////////
//ACL Function definition
BOOL InternalEnableDirectoryACL(LPCTSTR lpDirectory)
{
PACL pDACL = NULL,pNewDACL = NULL;
PSECURITY_DESCRIPTOR pSD = NULL;
EXPLICIT_ACCESS ea;

try
{
GetNamedSecurityInfo((LPTSTR)lpDirectory,SE_FILE_OBJECT, DACL_SECURITY_INFORMATION,
NULL, NULL, &pDACL, NULL, &pSD);

ZeroMemory(&ea,sizeof(ea));
ea.grfAccessMode = GRANT_ACCESS ;
ea.grfAccessPermissions = GENERIC_READ|GENERIC_EXECUTE|GENERIC_WRITE;
ea.grfInheritance = SUB_CONTAINERS_AND_OBJECTS_INHERIT;
ea.Trustee.TrusteeForm = TRUSTEE_IS_NAME;
ea.Trustee.ptstrName = _T("EVERYONE");

SetEntriesInAcl(1,&ea,pDACL,&pNewDACL);

SetNamedSecurityInfo((LPTSTR)lpDirectory,SE_FILE_OBJECT,DACL_SECURITY_INFORMATION,
NULL,NULL,pNewDACL,NULL);
if(pSD)
LocalFree((HLOCAL)pSD);
if(pNewDACL)
LocalFree((HLOCAL)pNewDACL);
return TRUE;
}
catch(...)
{
if(pSD)
LocalFree((HLOCAL)pSD);
if(pNewDACL)
LocalFree((HLOCAL)pNewDACL);
GetError(_T("EnableDirectoryACL"));
}
return FALSE;
}

BOOL _stdcall EnableDirectoryACL(LPTSTR lpDirectory)
{
CFileFind finder;
CString strName(lpDirectory);

BOOL bRet = finder.FindFile(strName);

while (bRet)
{
bRet = finder.FindNextFile();
strName = finder.GetFilePath();

if(finder.IsDots())
{
continue;
}

InternalEnableDirectoryACL(strName);

if (finder.IsDirectory())
{
strName += _T("\\*.*");
EnableDirectoryACL(strName.GetBuffer(5));
strName.ReleaseBuffer();

}
}

finder.Close();
return TRUE;

}




#include "stdafx.h"
#include "Service.h"
#include "SetupKit.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#import "C:\\windows\\system32\\com\\Comadmin.dll" no_namespace

////////////////////////////////////////////////////////////////////
//Service Function definition

BOOL _stdcall BeginService(LPTSTR lpServiceName)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

SC_HANDLE   schService = NULL;
SC_HANDLE   schSCManager = NULL;

try
{
schSCManager = OpenSCManager(
NULL,                   // Computer (NULL == local)
NULL,                   // Database (NULL == default)
SC_MANAGER_ALL_ACCESS   // Access required
);
if (!schSCManager)
{
return FALSE;
}

schService = OpenService( schSCManager,lpServiceName,SC_MANAGER_ALL_ACCESS);

if (!schService)
{
CloseServiceHandle(schSCManager);
return FALSE;
}

if (!StartService(schService,0,NULL) )
{
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return FALSE;
}

CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return TRUE;
}
catch(_com_error& err)
{
GetComErr(_T("BeginService"),err);
}
catch(...)
{
GetError(_T("BeginService"));
}
return FALSE;
}

BOOL _stdcall EndService(LPTSTR lpServiceName)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

SC_HANDLE   schService = NULL;
SC_HANDLE   schSCManager = NULL;

SERVICE_STATUS ss;

try
{
schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if (!schSCManager)
{
return FALSE;
}

schService = OpenService(schSCManager,lpServiceName,SC_MANAGER_ALL_ACCESS);

if (!schService)
{
CloseServiceHandle(schSCManager);
return FALSE;
}

DWORD dwStartTime = GetTickCount();
DWORD dwTimeout = 9000;
// Make sure the service is not already stopped
if(!QueryServiceStatus( schService, &ss ))
{
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return FALSE;
}

if(ss.dwCurrentState==SERVICE_STOPPED)
{
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return TRUE;
}

// If a stop is pending, just wait for it
while (ss.dwCurrentState==SERVICE_STOP_PENDING)
{
Sleep( ss.dwWaitHint );
if(!QueryServiceStatus( schService, &ss ) )
{
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return FALSE;
}

if(ss.dwCurrentState == SERVICE_STOPPED )
{
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return TRUE;
}

if (GetTickCount() - dwStartTime > dwTimeout)
{
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return FALSE;
}
}

DWORD i;
DWORD dwBytesNeeded;
DWORD dwCount;

LPENUM_SERVICE_STATUS   lpDependencies = NULL;
ENUM_SERVICE_STATUS     ess;
SC_HANDLE               hDepService;

// Pass a zero-length buffer to get the required buffer size
if ( EnumDependentServices(schService, SERVICE_ACTIVE,
lpDependencies, 0, &dwBytesNeeded, &dwCount ) )
{
// If the Enum call succeeds, then there are no dependent
// services so do nothing
}
else
{
if ( GetLastError() != ERROR_MORE_DATA )
{
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return FALSE; // Unexpected error
}

// Allocate a buffer for the dependencies
lpDependencies = (LPENUM_SERVICE_STATUS) HeapAlloc(
GetProcessHeap(), HEAP_ZERO_MEMORY, dwBytesNeeded );

try
{
// Enumerate the dependencies
if ( !EnumDependentServices( schService, SERVICE_ACTIVE,
lpDependencies, dwBytesNeeded, &dwBytesNeeded,
&dwCount ) )
return GetLastError();

for ( i = 0; i < dwCount; i++ )
{
ess = *(lpDependencies + i);

// Open the service
hDepService = OpenService(schSCManager, ess.lpServiceName, SERVICE_STOP | SERVICE_QUERY_STATUS );
if ( !hDepService )
{
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return FALSE; // Unexpected error
}

// Send a stop code
if ( !ControlService( hDepService, SERVICE_CONTROL_STOP,&ss ) )
{
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return FALSE;
}

// Wait for the service to stop
while ( ss.dwCurrentState != SERVICE_STOPPED )
{
Sleep( ss.dwWaitHint );
if ( !QueryServiceStatus( hDepService, &ss ) )
{
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return FALSE;
}

if ( ss.dwCurrentState == SERVICE_STOPPED )
break;

if ( GetTickCount() - dwStartTime > dwTimeout )
{
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return FALSE;
}
}
CloseServiceHandle( hDepService );
}
}
catch(_com_error& err)
{
GetComErr(_T("EndService_EndDependency"),err);
}
catch(...)
{
GetError(_T("EndService_EndDependency"));
}
HeapFree( GetProcessHeap(), 0, lpDependencies );
}

// Send a stop code to the main service
if(!ControlService( schService, SERVICE_CONTROL_STOP, &ss ))
{
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return FALSE;
}

// Wait for the service to stop
while ( ss.dwCurrentState != SERVICE_STOPPED )
{
Sleep( ss.dwWaitHint );
if ( !QueryServiceStatus(schService, &ss ) )
{
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return FALSE;
}

if ( ss.dwCurrentState == SERVICE_STOPPED )
break;

if( GetTickCount() - dwStartTime > dwTimeout )
{
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return FALSE;
}
}
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return TRUE;
}
catch(_com_error& err)
{
GetComErr(_T("EndService"),err);
}
catch(...)
{
GetError(_T("EndService"));
}
return FALSE;
}

BOOL _stdcall InstallService(LPTSTR lpServiceName,LPTSTR lpServiceDispName,LPTSTR lpServicePath)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

SC_HANDLE   schService = NULL;
SC_HANDLE   schSCManager = NULL;

try
{
schSCManager = OpenSCManager(
NULL,                   // Computer (NULL == local)
NULL,                   // Database (NULL == default)
SC_MANAGER_ALL_ACCESS   // Access required
);
if (!schSCManager)
{
return FALSE;
}

schService = OpenService(schSCManager,lpServiceName,SC_MANAGER_ALL_ACCESS);
//if exsit,return true
if (schService)
{
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return TRUE;
}
//if not exsit,reset point
schService = NULL;

schService = CreateService(
schSCManager,               // SCManager database
lpServiceName,              // name of service
lpServiceDispName,          // service name to display
SERVICE_ALL_ACCESS,         // desired access
SERVICE_WIN32_OWN_PROCESS,  // service type
SERVICE_AUTO_START,       // start type
SERVICE_ERROR_NORMAL,       // error control type
lpServicePath,              // path to service's binary
NULL,                       // no load ordering group
NULL,                       // no tag identifier
NULL,                       // no dependencies
NULL,                       // LocalSystem account
NULL);                      // no password

if (!schService)
{
CloseServiceHandle(schSCManager);
return FALSE;
}

BeginService(lpServiceName);

CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);

return TRUE;
}
catch(_com_error& err)
{
GetComErr(_T("InstallService"),err);
}
catch(...)
{
GetError(_T("InstallService"));
}
return FALSE;
}

BOOL _stdcall UnInstallService(LPTSTR lpServiceName)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

SC_HANDLE   schService = NULL;
SC_HANDLE   schSCManager = NULL;

EndService(lpServiceName);

try
{
schSCManager = OpenSCManager(
NULL,                   // Computer (NULL == local)
NULL,                   // Database (NULL == default)
SC_MANAGER_ALL_ACCESS   // Access required
);
if (!schSCManager)
{
return FALSE;
}

schService = OpenService(
schSCManager,       // SCManager database
lpServiceName,      // name of service
DELETE);            // only need DELETE access

if (!schService)
{
CloseServiceHandle(schSCManager);
return FALSE;
}

if (!DeleteService(schService) )
{
CloseServiceHandle(schSCManager);
CloseServiceHandle(schService);
return FALSE;
}

CloseServiceHandle(schSCManager);
CloseServiceHandle(schService);

return TRUE;
}
catch(_com_error& err)
{
GetComErr(_T("InInstallService"),err);
}
catch(...)
{
GetError(_T("InInstallService"));
}
return FALSE;

}

//Com Plus Manage API

BOOL _stdcall RemoveComPlusApp(LPTSTR lpAppName)
{
CoInitialize(NULL);
BOOL bRet = FALSE;

try
{
_bstr_t bAppName = _bstr_t(lpAppName);
ICOMAdminCatalogPtr spCatalog("COMAdmin.COMAdminCatalog");
ICatalogCollectionPtr spApplications;
spApplications = spCatalog->GetCollection (L"Applications");
spApplications->Populate ();

LONG count = 0;
spApplications->get_Count(&count);
for(INT i=0;i<count;i++)
{
HRESULT hr;
ICatalogObject* pObject = NULL;
hr = spApplications->get_Item(i,(IDispatch**)&pObject);
if(hr==S_OK)
{
VARIANT vName;
pObject->get_Name(&vName);
_bstr_t bName = _bstr_t(vName.bstrVal);
if(bName==bAppName)
{
spApplications->Remove(i);
}
pObject->Release();
}
}

HRESULT hr = spApplications->SaveChanges();

bRet = SUCCEEDED(hr);
}
catch(_com_error& err)
{
GetComErr(_T("RemoveComPlusApp"),err);
}
catch(...)
{
GetError(_T("RemoveComPlusApp"));
}

CoUninitialize();
return bRet;
}

BOOL InternalModifyTransactionTimeout(LPTSTR lpAppName,LONG timeout)
{
try
{
_bstr_t bAppName = _bstr_t(lpAppName);
ICOMAdminCatalogPtr spCatalog("COMAdmin.COMAdminCatalog");
ICatalogCollectionPtr spApplications;
spApplications = spCatalog->GetCollection (L"Applications");
spApplications->Populate ();

LONG counts = 0;
spApplications->get_Count(&counts);
for(INT i=0;i<counts;i++)
{
HRESULT hr;
ICatalogObject* pdispApp = NULL;
ICatalogObjectPtr pApp = NULL;
hr = spApplications->get_Item(i,(IDispatch**)&pdispApp);
if(hr==S_OK)
{
pApp = pdispApp;

VARIANT vName;
pApp->get_Name(&vName);
_bstr_t bName = _bstr_t(vName.bstrVal);
if(bName==bAppName)
{
_variant_t vKey;
pApp->get_Key(&vKey);
ICatalogCollectionPtr pObjects = NULL;
pObjects = spApplications->GetCollection(_bstr_t("Components"),vKey);
pObjects->Populate();

UINT count = pObjects->Count;
for(UINT i=0;i<count;i++)
{
ICatalogObject* pdispObject = NULL;
ICatalogObjectPtr pObject = NULL;
HRESULT hr;
hr = pObjects->get_Item(i,(IDispatch**)&pdispObject);
if(hr==S_OK)
{
pObject = pdispObject;

_variant_t bVar;
bVar.vt = VT_BOOL;

_variant_t lVar;
lVar.vt = VT_I4;

lVar = pObject->GetValue(_bstr_t("Transaction"));
//transaction larger than support
if(lVar.lVal>2)
{
bVar.boolVal = TRUE;
pObject->put_Value(_bstr_t("ComponentTransactionTimeoutEnabled"),bVar);
lVar.lVal = timeout;
pObject->put_Value(_bstr_t("ComponentTransactionTimeout"),lVar);

}
}
}//for end
pObjects->SaveChanges();
}//if end
}//if end
}//for end
return TRUE;//
}
catch(_com_error& err)
{
GetComErr(_T("RemoveComPlusApp"),err);
AfxMessageBox(err.ErrorMessage());
}
catch(...)
{
GetError(_T("RemoveComPlusApp"));
}
return FALSE;
}

BOOL _stdcall ModifyTransactionTimeout(LPTSTR lpAppName,LONG timeout)
{
CoInitialize(NULL);
InternalModifyTransactionTimeout(lpAppName,timeout);
CoUninitialize();
return FALSE;
}

BOOL _stdcall B64System(void)
{
TCHAR path[MAX_PATH+1];
ZeroMemory(path,sizeof(path));
ExpandEnvironmentStrings(_T("%PROCESSOR_ARCHITEW6432%"),path,MAX_PATH);
if( path!=NULL && _tcsstr(_T("IA64"),path)!=NULL)
return TRUE;
else
return FALSE;
}




// SetupKit.cpp : Defines the initialization routines for the DLL.
//

#include "stdafx.h"
#include "SetupKit.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//
//	Note!
//
//		If this DLL is dynamically linked against the MFC
//		DLLs, any functions exported from this DLL which
//		call into MFC must have the AFX_MANAGE_STATE macro
//		added at the very beginning of the function.
//
//		For example:
//
//		extern "C" BOOL PASCAL EXPORT ExportedFunction()
//		{
//			AFX_MANAGE_STATE(AfxGetStaticModuleState());
//			// normal function body here
//		}
//
//		It is very important that this macro appear in each
//		function, prior to any calls into MFC.  This means that
//		it must appear as the first statement within the
//		function, even before any object variable declarations
//		as their constructors may generate calls into the MFC
//		DLL.
//
//		Please see MFC Technical Notes 33 and 58 for additional
//		details.
//

/////////////////////////////////////////////////////////////////////////////
// CSetupKitApp

BEGIN_MESSAGE_MAP(CSetupKitApp, CWinApp)
//{{AFX_MSG_MAP(CSetupKitApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
//    DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSetupKitApp construction

CSetupKitApp::CSetupKitApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CSetupKitApp object

CSetupKitApp theApp;

/////////////////////////////////////////////////////////////////////////////
// Error Handling

int _stdcall WriteText(LPTSTR lpSrc,LPTSTR lpMsg)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

CStdioFile inputFile;
TCHAR lpFile[MAX_PATH];
ZeroMemory(lpFile,sizeof(lpFile));

GetSystemDirectory(lpFile, MAX_PATH);
_tcscat(lpFile,_T("\\U8SetupError.log"));

TCHAR lpMutexName[15] = _T("U8SETUPERRLOG");
HANDLE hMutex;
try
{
hMutex = OpenMutex(MUTEX_ALL_ACCESS,FALSE,lpMutexName);
if(!hMutex)
{
hMutex = CreateMutex(NULL,FALSE,lpMutexName);
}

if(!hMutex)
return 0;
WaitForSingleObject(hMutex,INFINITE);
inputFile.Open(lpFile,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);
inputFile.SeekToEnd();

COleDateTime time = COleDateTime::GetCurrentTime();
CString sMsg = time.Format(_T("[%Y-%m-%d %H:%M:%S "));
DWORD dwID = GetCurrentThreadId();
CString strID;
strID.Format(_T("Thread:%d]"),dwID);
sMsg += strID;

UINT nMax = _tcslen(lpSrc)+_tcslen(lpMsg)+256;
TCHAR* lpSource = new TCHAR[nMax];
ZeroMemory(lpSource,nMax);
_tcscpy(lpSource,lpSrc);

_tcscat(lpSource,_T(":"));
_tcscat(lpSource,lpMsg);
_tcscat(lpSource,_T("\n"));
sMsg.Insert(sMsg.GetLength(),lpSource);
inputFile.WriteString(sMsg);

inputFile.Close();
delete[] lpSource;
}
catch(...)
{
}
ReleaseMutex(hMutex);
return 0;
}

void GetError(LPTSTR lpSource)
{
LPVOID lpMsgBuf;
if (!FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL ))
{
// Handle the error.
return;
}

WriteText(lpSource,(LPTSTR)lpMsgBuf);

LocalFree(lpMsgBuf);
}

void GetComErr(LPTSTR lpSource,_com_error& err)
{
_bstr_t bstrErr(err.ErrorMessage());
bstrErr += "\n"+err.Description();
WriteText(lpSource,(LPTSTR)bstrErr);
}




; SetupKit.def : Declares the module parameters for the DLL.

LIBRARY      "SetupKit2"
DESCRIPTION  'SetupKit2 Windows Dynamic Link Library'

EXPORTS
; Explicit exports can go here
BeginService							@1
EndService								@2
InstallService							@3
UnInstallService						@4
AdsiCreateWeb							@5
AdsiDeleteWeb							@6
AdsiSetHttpErrorPage					@7
AdsiCreateSubApp						@8
AdsiIsExist								@9
AdsiSetSession							@10
AdsiCreateWebSite						@11
AdsiDeleteWebSite						@12
AdsiCreateWebWithInstance				@13
AdsiDeleteWebWithInstance				@14
AdsiCreateWebWithPath					@15
WriteText								@16
AdsiStartIIS							@17
AdsiStopIIS								@18
AdsiEnableService						@19
EnableDirectoryACL						@20
RemoveComPlusApp						@21
ModifyTransactionTimeout				@22
AdsiIsExistIIS							@23
B64System								@24
AdsiSetConnectionTimeout				@25
AdsiSetKeepAlive						@26
SetScriptMaps                           @27
AdsiSetMIMEType                         @28
InternalSetMIMEType                     @29
InstallU8SLSVR                          @30
DisableAutotuning                       @31
AdsiGetWebRootWithBinding               @32
AdsiCreateWebWithSiteName               @33
AdsiCreateWebServer                     @34
AdsiCreateVirtualDirection              @35
AdsiCreateIdentifier                    @36
AdsiDeleteIdentifier                    @37




// stdafx.cpp : source file that includes just the standard includes
//	SetupKit.pch will be the pre-compiled header
//	stdafx.obj will contain the pre-compiled type information

#include "stdafx.h"



// U8SLConfigKits.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include "WebSetup.h"
#include "SetupKit.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

CString dbInfo;
/////////////////////////////////////////////////////////////////////////////
// The one and only application object

CString modulePath;

bool ExecuteCmd(LPCTSTR cmd,LPCTSTR workPath)
{
long exitCode = 0;
CString cmdLine = _T("cmd.exe /C ") ;
cmdLine = cmdLine + cmd;
PROCESS_INFORMATION pi;
STARTUPINFO si = {sizeof(si)};
bool isexcutecmdsuccess=FALSE;
int ret =CreateProcess(NULL,(LPTSTR)(LPCTSTR)cmdLine, NULL, NULL, FALSE,CREATE_NO_WINDOW,NULL,(LPTSTR)workPath,&si,&pi);
if (!ret)
{
dbInfo.Format(_T("ExecuteCmd: CreateProcess Error %d ExecuteCmd Failed: %s"),::GetLastError(),cmdLine);
WriteText( _T("ExecuteCmd "),(LPTSTR)(LPCTSTR)dbInfo);
OutputDebugString(dbInfo);
return FALSE;
}
else
{

DWORD dwWaitResult;
dwWaitResult=WaitForSingleObject(pi.hProcess,INFINITE);
if(dwWaitResult==WAIT_TIMEOUT)
{
WriteText( _T("ExecuteCmd Failed Wait Timeout"),_T("elapsed 3 minutes"));
}
else if(dwWaitResult==WAIT_ABANDONED)
{
GetError(_T("Wait abrandoned"));
}
WriteText( _T("ExecuteCmd Success"),(LPTSTR)(LPCTSTR)cmdLine);
WriteText(_T("GetExitCode"),_T("Get...."));
GetExitCodeProcess(pi.hProcess,(unsigned long*)&exitCode);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
TCHAR lpmsg[128];
_itot(exitCode,lpmsg,10);
WriteText(_T("ExecuteCmd ExitCode"),lpmsg);
if(exitCode==0)
{
isexcutecmdsuccess=TRUE;
}
else
{
isexcutecmdsuccess=FALSE;
}
}
return  isexcutecmdsuccess;
}

bool GetU8InstallRoot(CString &path)
{
HKEY	hk;
TCHAR	szBuf[1024] = {0};
DWORD	dwData = sizeof(szBuf);
DWORD type;

if (::RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("SOFTWARE\\Ufsoft\\WF\\V8.700\\Install\\CurrentInstPath"),0,KEY_QUERY_VALUE,&hk) != ERROR_SUCCESS)
{
::RegCloseKey(hk);
return false;
}

if (::RegQueryValueEx(hk,_T(""),NULL,&type,(LPBYTE)szBuf,&dwData) == ERROR_SUCCESS)
{
if (type == REG_SZ)
{
::RegCloseKey(hk);
path = szBuf;
path = path + _T("\\");
return true;
}
}

::RegCloseKey(hk);
return false;

}

bool InstallFileVersionService(const CString&webPath ,const CString& u8Path)
{
CFile pFile;
CString configFile = u8Path + _T("U8SLFileVersionService.config");
if (!pFile.Open(configFile,CFile::typeBinary | CFile::modeCreate | CFile::modeWrite |CFile::shareDenyNone))
{
TRACE(_T("Can't open file %s"), webPath);
return FALSE;
}
CString clientBin = webPath;
clientBin = clientBin + _T("\\ClientBin");

pFile.Write(clientBin,clientBin.GetLength());
pFile.Close();

//sc create U8SLFileVersionService binpath= "E:\SourceCode\U8SLFileVersionService\Debug\U8SLFileVersionService.exe" type= own start= auto
//	sc start U8SLFileVersionService
CString createCmd, startCmd, exePath;
exePath = u8Path + _T("U8SLFileVersionService.exe");
//ExecuteCmd(CString("sc delete U8SLFileVersionService"),exePath);

ExecuteCmd(_T("sc stop U8SLFileVersionService"), u8Path);

ExecuteCmd(_T("sc delete U8SLFileVersionService"), u8Path);

createCmd.Format(_T("sc create U8SLFileVersionService binpath= \"%s\" type= own start= auto"), exePath);
ExecuteCmd(createCmd,u8Path);

startCmd = _T("sc start U8SLFileVersionService");
ExecuteCmd(startCmd, u8Path);
return TRUE;
}

// bool InstallPolicyService(const CString& u8Path)
// {
// 	CString createCmd, startCmd, stopCmd, delCmd, exePath;
// 	exePath = u8Path + _T("U8SLPolicyService.exe");
//
// 	ExecuteCmd(_T("sc stop U8SLPolicyService"), u8Path);
//
// 	ExecuteCmd(_T("sc delete U8SLPolicyService"), u8Path);
//
// 	createCmd.Format(_T("sc create U8SLPolicyService binpath= \"%s\" type= own start= auto"),exePath);
// 	ExecuteCmd(createCmd, u8Path);
//
// 	startCmd = _T("sc start U8SLPolicyService");
// 	ExecuteCmd(startCmd, u8Path);
// 	return TRUE;
// }

bool ExecuteDependencyService(const CString&webPath ,const CString& u8Path)
{
//we need make a change in the clinetbin ,so we can inovke the FileVersionService

CString clientBin = webPath;
clientBin = clientBin + _T("\\ClientBin");
CFile pFile;
CString tmpFile = clientBin + _T("\\ExecuteDependencyService.tmp");
if (!pFile.Open(tmpFile,CFile::typeBinary | CFile::modeCreate | CFile::modeWrite |CFile::shareDenyNone))
{
TRACE(_T("Can't open file %s"), webPath);
return FALSE;
}
pFile.Close();
::DeleteFile(tmpFile);
Sleep(3000);

TCHAR pszVsVar32BatPath[MAX_PATH] = {0};
if(!GetEnvironmentVariable(_T("VS90COMNTOOLS"),pszVsVar32BatPath,MAX_PATH))
{
OutputDebugString( _T("Get EnvironmentVariable VS90COMNTOOLS Failed"));
return FALSE;
}

CString configFile = u8Path + _T("U8SLAmbDependencyService.config");
if (!pFile.Open(configFile,CFile::typeBinary | CFile::modeCreate | CFile::modeWrite |CFile::shareDenyNone))
{
dbInfo.Format(_T("Can't open file %s"), webPath);
OutputDebugString(dbInfo);
return FALSE;
}
_tcscat(pszVsVar32BatPath,_T("vsvars32.bat"));

pFile.Write(clientBin,clientBin.GetLength()*sizeof(TCHAR));
pFile.Write(_T("\r\n"), sizeof(TCHAR)*2);
pFile.Write(pszVsVar32BatPath, _tcslen(pszVsVar32BatPath)*sizeof(TCHAR));
pFile.Close();
CString cmd = u8Path + _T("U8SLAmbDependencyService.exe");
ExecuteCmd(cmd,u8Path);
return TRUE;
}

typedef BOOL (_stdcall *funAdsiCreateWeb)(LPCTSTR lpVDirectoryName,LPCTSTR lpPath,LPCTSTR lpUserName,LPCTSTR lpPWD,BOOL bIsNeedUser);
typedef BOOL (_stdcall *funAdsiSetMIMEType)(LPCTSTR, LPCTSTR, LPCTSTR);
typedef BOOL (_stdcall *funAdsiIsExist)(LPCTSTR lpVirtualName);
typedef BOOL (_stdcall *funAdsiDeleteWeb)(LPCTSTR lpVDirectory);
typedef BOOL (_stdcall *funAdsiIsExistIIS)();
typedef BOOL (_stdcall *funAdsiGetWebRootWithBinding)(BSTR* pbstrRoot, int nPort);

BOOL CopyPolicyTo80Web(const CString&u8Path)
{
BOOL bRet = FALSE;
// 	CString setupKit2DllPath;
// 	funAdsiGetWebRootWithBinding	 pAdsiGetWebRootWithBinding = NULL;
//
// 	HINSTANCE  hIns = NULL;
BSTR bstrRoot =  NULL;
BOOL b80WebExist = FALSE;
CString polilcyPath ;
CString treeviewhtcPath;

CString targetPath ;
CString targetPath2;

//
// 	setupKit2DllPath = u8Path + _T("SetupKit2.dll");
//
// 	hIns = LoadLibrary(setupKit2DllPath);
// 	if (hIns == NULL)
// 	{
// 		OutputDebugString( _T("LoadLibrayr SetupKit2.dll Failed.") );
// 		goto ERR;
// 	}
//
// 	pAdsiGetWebRootWithBinding = (funAdsiGetWebRootWithBinding) GetProcAddress(hIns, "AdsiGetWebRootWithBinding");
// 	if (!pAdsiGetWebRootWithBinding)
// 	{
// 		goto ERR;
// 	}

b80WebExist = AdsiGetWebRootWithBinding(&bstrRoot, 80);

if (!b80WebExist)
{
OutputDebugString(_T("80 WebSite not exist.") );
goto ERR;
}

polilcyPath = u8Path + "clientaccesspolicy.xml";
treeviewhtcPath  = u8Path + "treeview.htc";

targetPath = bstrRoot;
targetPath = targetPath + "\\clientaccesspolicy.xml";

targetPath2 = bstrRoot;
targetPath2 = targetPath2 + "\\treeview.htc";

bRet = CopyFile(polilcyPath, targetPath, FALSE);
bRet = bRet && CopyFile(treeviewhtcPath, targetPath2, FALSE);

ERR:
// 	 if (hIns != NULL)
// 	 {
// 		 FreeLibrary(hIns);
// 	 }
return bRet;
}

//AdsiSetMIMEType("U8Portal",".hdr","InstallShiled List File");
BOOL CreateWeb(const CString& u8Path ,const CString& webPath,const CString& webName)
{
BOOL bRet = FALSE;
CString setupKitDllPath;
setupKitDllPath = u8Path + _T("SetupKit.dll");

HINSTANCE  hIns = LoadLibrary(setupKitDllPath);
funAdsiCreateWeb	pAdsiCreateWeb;
funAdsiSetMIMEType	pAdsiSetMIMEType;
funAdsiIsExist	pAdsiIsExist;
funAdsiDeleteWeb pAdsiDeleteWeb;
funAdsiIsExistIIS pAdsiIsExistIIS;

if (hIns == NULL)
{
OutputDebugString( _T("LoadLibrayr SetupKit.dll Failed."));
return bRet;
}

pAdsiIsExistIIS = (funAdsiIsExistIIS) GetProcAddress(hIns, "AdsiIsExistIIS");
BOOL bDefWebExist = pAdsiIsExistIIS();
if (!bDefWebExist)
{
OutputDebugString(_T("Default Web Site not exist"));
}

pAdsiDeleteWeb = (funAdsiDeleteWeb) GetProcAddress(hIns, "AdsiDeleteWeb");

pAdsiIsExist = (funAdsiIsExist) GetProcAddress(hIns, "AdsiIsExist");
BOOL bU8SLExist = pAdsiIsExist(webName);
if (bU8SLExist)
{
if (!pAdsiDeleteWeb(webName))
{
OutputDebugString(_T("Delete Web Failed."));
}

}

pAdsiCreateWeb = (funAdsiCreateWeb)GetProcAddress(hIns, "AdsiCreateWeb");
bRet = pAdsiCreateWeb(webName, webPath,_T(""), _T(""), FALSE);
if (!bRet)
{
OutputDebugString(_T("Create Web Failed."));
}

pAdsiSetMIMEType = (funAdsiSetMIMEType)GetProcAddress(hIns, "AdsiSetMIMEType");
pAdsiSetMIMEType(webName, _T(".xaml"), _T("application/xaml+xml"));
pAdsiSetMIMEType(webName, _T(".xap"), _T("application/x-silverlight-app"));

FreeLibrary(hIns);

return bRet;
}

#define  bufsize  1024

BOOL InstallWCFService(const CString& u8Path,const CString& webPath )
{

/*
ExecuteCmd(CString(_T("sc stop U8DispatchService")),u8Path);
ExecuteCmd(CString(_T("sc stop U8KeyManagePool")),u8Path);

ExecuteCmd(	_T("sc start U8DispatchService"), u8Path);
ExecuteCmd(	_T("sc start U8KeyManagePool"), u8Path);

ExecuteCmd(_T("sc stop U8HostService"), u8Path);
ExecuteCmd(_T("sc stop U8RouterHost"), u8Path);

ExecuteCmd(_T("sc delete U8RouterHost"), u8Path);
ExecuteCmd(	CString(_T("SC CREATE U8RouterHost binPath= \"")) + u8Path + CString(_T("U8RouterHost.exe\" ")) +  CString(_T("start= auto DisplayName= \"U8RouterHost\"")),u8Path);
ExecuteCmd( _T("SC description U8RouterHost \"作为Silverlight的服务控制管理器使用,部署在服务端,为U8 Web应用客户端提供远程代理服务\""), u8Path);
ExecuteCmd(_T("sc  start U8RouterHost"), u8Path);

ExecuteCmd(_T("sc delete U8HostService"), u8Path);
ExecuteCmd( CString(_T("SC CREATE U8HostService binPath= \"")) + u8Path + _T( "U8HostService.exe\"") + CString(_T(" start= auto DisplayName= \"U8HostService\"")),u8Path);
ExecuteCmd( _T("SC description U8HostService \"作为Silverlight的服务控制管理器使用,部署在服务端,为U8 Web应用客户端提供远程代理服务\""),u8Path);
ExecuteCmd( _T("sc config \"U8HostService\" depend= U8RouterHost"), u8Path);
ExecuteCmd(_T("sc  start U8HostService"),u8Path);
*/
ExecuteCmd(_T("SC stop U8WebPool"), u8Path);
ExecuteCmd(_T("SC delete U8WebPool"), u8Path);
ExecuteCmd(CString(_T("SC CREATE U8WebPool binPath= \"")) + u8Path + CString(_T("U8WebPool.exe\" ")) +  CString(_T("start= auto DisplayName= \"U8WebPool\"")),u8Path);
ExecuteCmd(_T("SC description U8WebPool \"作为Silverlight的服务控制管理器使用,部署在服务端,为U8 Web应用客户端提供远程代理服务\""), u8Path);
ExecuteCmd(_T("SC  start U8WebPool"), u8Path);

return TRUE;
}

BOOL _stdcall InstallU8SLSVR()
{
int nRetCode = 0;

{

TCHAR currentDirectory[MAX_PATH] = {0};
GetCurrentDirectory(MAX_PATH, currentDirectory);
modulePath = currentDirectory;

CString strU8Path, strWebPath;

if (!GetU8InstallRoot(strU8Path))
{
WriteText( _T("GetU8InstallRoot Failed"),_T(""));
return FALSE;
}

strWebPath = strU8Path + _T("U8SL");
//
// 		if (!InstallFileVersionService(strWebPath, strU8Path))
// 		{
// 			WriteText(_T("InstallFileVersionService Failed"),_T(""));
// 		}
// 		else
// 		{
// 			WriteText( _T("InstallFileVersionService Sucess"),_T(""));
// 		}

// 		if (!InstallPolicyService(strU8Path))
// 		{
// 			cout << _T("InstallPolicyService Failed") <<endl;
// 		}
// 		else
// 		{
// 			cout << _T("InstallPolicyService Sucess") << endl;
// 		}

// 		if (!CreateWeb(strU8Path, strWebPath,CString("U8SL")))
// 		{
// 			OutputDebugString( _T("CreateWeb Failed") );
// 		}
// 		else
// 		{
// 			OutputDebugString(_T("CreateWeb Sucess") );
// 		}

if (CopyPolicyTo80Web(strU8Path))
{
WriteText(_T("CopyPolicyTo80Web Sucess"),_T("") );
}
else
{
WriteText( _T("CopyPolicyTo80Web Failed"),_T("") );
}

//只有装U8DispatchService时才装U8webpool

CString	 szU8DispatchServicePath = strU8Path + "U8DispatchService.exe";
CFileFind finder;

if (finder.FindFile(szU8DispatchServicePath))
{
finder.Close();
if (!InstallWCFService(strU8Path, strWebPath))
{
WriteText(_T("InstallWCFService Failed"),_T("")) ;
}
else
{
WriteText (_T("InstallWCFService Sucess"),_T(""));
}
}

// 		if (!ExecuteDependencyService(strWebPath, strU8Path))
// 		{
// 			OutputDebugString(_T("ExecuteDependencyService Failed"));
// 		}
// 		else
// 		{
// 			OutputDebugString( _T("ExecuteDependencyService Sucess"));
// 		}

}

return TRUE;
}

void _stdcall DisableAutotuning()
{
OSVERSIONINFOEX osvi;
::ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
::GetVersionEx((LPOSVERSIONINFO)&osvi);

//visita 以上
if(osvi.dwMajorVersion >= 6)
{
ExecuteCmd(_T("netsh interface tcp set global autotuninglevel=disabled "), NULL);
}
}




#include "stdafx.h"
#include "WebSetup.h"
#include "SetupKit.h"
#include "atlconv.h"
#include  "activeds.h"
#include  "windows.h"
#include  "Iads.h"
#include  "comdef.h"
#include  "tchar.h"
#include   "stdio.h"
#include   "Adshlp.h"
#pragma   comment(lib,"ActiveDS")
#pragma   comment(lib,"adsiid")
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

////////////////////////////////////////////////////////////////////
//WebSetup Function Definition(ADSI)

////////////////////////////////////////////////////////////////////
//ADSI Function

//uiInst      - web server instance
//lpPath      - relative path("/Root/MyDir")
//riid        - IID
//ppContainer - out pointer
BOOL InternalGetObject(UINT uiInst,LPCTSTR lpPath,REFIID riid,void **ppv)
{
USES_CONVERSION;

WCHAR szPath[MAX_PATH+1];
szPath[0] = '\0';
wcscpy(szPath,L"IIS://localhost/w3svc/");
WCHAR inst[3];
inst[0] = '\0';
_itow(uiInst,inst,10);
wcsncat(szPath,inst,wcslen(inst));
wcsncat(szPath,L"/Root/",6);
LPWSTR lpwPath = T2W((LPTSTR)lpPath);
wcsncat(szPath,lpwPath,wcslen(lpwPath));

HRESULT hr = ADsGetObject(szPath,riid,ppv);

return SUCCEEDED(hr);
}

BOOL InternalGetRoot(UINT uiInst,REFIID riid,void **ppv)
{
WCHAR szPath[MAX_PATH+1];
szPath[0] = '\0';
wcscpy(szPath,L"IIS://localhost/w3svc/");
WCHAR inst[3];
inst[0] = '\0';
_itow(uiInst,inst,10);
wcsncat(szPath,inst,wcslen(inst));
wcsncat(szPath,L"/Root",5);

HRESULT hr = ADsGetObject(szPath,riid,ppv);

return SUCCEEDED(hr);
}

BOOL IsExist(LPCTSTR lpVirtualPath,UINT inst)
{
IADs* iAds = NULL;

HRESULT hr = InternalGetObject(inst,lpVirtualPath,IID_IADs,(void**)&iAds);

if(SUCCEEDED(hr)&&iAds)
{
iAds->Release();
return TRUE;
}
return FALSE;
}

UINT FindInstance(LPCTSTR instance)
{
IADsContainer* iContainer = NULL;
IADs* iAds = NULL;

UINT ins=0;

try
{
HRESULT hr = ADsGetObject(L"IIS://localhost/w3svc",IID_IADsContainer,(void**)&iContainer);
ASSERT(iContainer);

TCHAR inst[3];
inst[0] = '\0';
UINT i=1;
_itot(i,inst,10);

//get IIS web server
hr = iContainer->GetObject(_bstr_t("IIsWebServer"),_bstr_t(inst),(IDispatch**)&iAds);
ASSERT(iAds);
VARIANT varName;
while(iAds)
{
iAds->Get(_bstr_t("ServerComment"),&varName);
if(_bstr_t(varName.bstrVal)!=_bstr_t(instance))
{
i++;
_itot(i,inst,10);

iAds->Release();

//get IIS web server
iContainer->GetObject(_bstr_t("IIsWebServer"),
_bstr_t(inst),(IDispatch**)&iAds);
}
else
{
ins = i;
iAds->Release();
break;
}
}

iContainer->Release();
VariantClear(&varName);
}
catch(_com_error& err)
{
GetComErr(_T("Internal FindInstance"),err);
}
catch(...)
{
GetError(_T("Internal FindInstance"));
}

//not found!
if(!ins)
return 0;
//found it
return ins;
}

BOOL InternalSetScriptMaps(IADs *iAds)
{
ASSERT(iAds);

BOOL bRet = FALSE;

VARIANT vProp;
VariantInit(&vProp);
vProp.vt = VT_ARRAY|VT_BSTR;

SAFEARRAY FAR* psa = NULL;
SAFEARRAY *pNewArray = NULL;
LONG lElements=0,lLBound=0,lUBound=0;

try
{
//get ScriptMaps from meta data
HRESULT hr = iAds->Get(_bstr_t("ScriptMaps"),&vProp);
if(FAILED(hr))
goto clean;

psa = V_ARRAY(&vProp);

ASSERT(psa);

hr = SafeArrayGetLBound(psa, 1, &lLBound);
hr = SafeArrayGetUBound(psa, 1, &lUBound);
lElements = lUBound-lLBound+1;

SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = lElements+4;
pNewArray = SafeArrayCreate(VT_VARIANT,1,rgsabound);

//copy exsit script maps into new array
for(LONG i=0;i<lElements;i++)
{
_variant_t varValue;

hr = SafeArrayGetElement(psa,&i,(void*)&varValue);
hr = SafeArrayPutElement(pNewArray,&i,(void*)&varValue);
}

//add script maps

TCHAR szContent[MAX_PATH+1];
szContent[0] = '\0';
GetWindowsDirectory(szContent,MAX_PATH);
_tcsncat(szContent,_T("\\Microsoft.Net\\Framework\\v2.0.50727\\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG"),73);

LONG index = lElements;
_variant_t var;
var.vt = VT_BSTR;

var.bstrVal = _bstr_t(".htm,")+szContent;
hr = SafeArrayPutElement(pNewArray,&index,(void*)&var);

index++;
var.bstrVal = _bstr_t(".html,")+szContent;
hr = SafeArrayPutElement(pNewArray,&index,(void*)&var);

index++;
var.bstrVal = _bstr_t(".js,")+szContent;
hr = SafeArrayPutElement(pNewArray,&index,(void*)&var);

index++;
var.bstrVal = _bstr_t(".vbs,")+szContent;
hr = SafeArrayPutElement(pNewArray,&index,(void*)&var);

VARIANT vNewProp;
VariantInit(&vNewProp);
vNewProp.vt = VT_ARRAY|VT_BSTR;
V_ARRAY(&vNewProp) = pNewArray;
hr = iAds->Put(_bstr_t("ScriptMaps"),vNewProp);

hr = iAds->SetInfo();

bRet = SUCCEEDED(hr);
if(bRet)
{
WriteText(_T("InternalSetScriptMaps "),_T(" SUCCEEDED"));
}
else
{
WriteText(_T("InternalSetScriptMaps "),_T(" FAILED "));
}
}
catch(_com_error& err)
{
GetComErr(_T("InternalSetScriptMaps"),err);
}
catch(...)
{
GetError(_T("InternalSetScriptMaps"));
}
clean:
psa = NULL;
VariantClear(&vProp);
return bRet;
}

BOOL _stdcall SetScriptMaps(LPCTSTR lpVPath,LPCTSTR lpInstance)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

CoInitialize(NULL);

IADs* iAds = NULL;
BOOL bRet = FALSE;

try
{
UINT uInst = 1;
if(lpInstance&&_tcslen(lpInstance))
uInst = FindInstance(lpInstance);
if(!uInst)
goto clean;

if(InternalGetObject(uInst,lpVPath,IID_IADs,(void**)&iAds))
{
ASSERT(iAds);
if(InternalSetScriptMaps(iAds))
{
bRet = TRUE;
}
}
}
catch(_com_error& err)
{
GetComErr(_T("SetScriptMaps"),err);
}
catch(...)
{
GetError(_T("SetScriptMaps"));
}
clean:
if(iAds)
iAds->Release();
return bRet;
}
//创建网站根据提供的名称
BOOL InternalCreateWebWithSiteName(LPCTSTR SiteName,LPCTSTR lpVName,LPCTSTR lpPath,LPCTSTR lpUserName,LPCTSTR lpPWD,BOOL bIsNeedUser,UINT instance)
{
IADsContainer* iContainer = NULL;
IADs* iAds = NULL;

BOOL bRet = FALSE;
WriteText(_T("SetupKit.dll "),_T("InternalCreateWeb(LPCTSTR SiteName,LPCTSTR lpVName,LPCTSTR lpPath,LPCTSTR lpUserName,LPCTSTR lpPWD,BOOL bIsNeedUser,UINT instance)"));
try
{
if(!InternalGetRoot(instance,IID_IADsContainer,(void**)&iContainer))
{
goto clean;
}
ASSERT(iContainer);
HRESULT hr = iContainer->Create(_bstr_t("IIsWebVirtualDir"),_bstr_t(lpVName),(IDispatch**)&iAds);
ASSERT(iAds);
if(FAILED(hr))
{
goto clean;
}

//set path
iAds->Put(_bstr_t("Path"),_variant_t(lpPath));

_variant_t vAuth;
vAuth.vt = VT_I4;
vAuth.intVal = 0x00000001;
iAds->Put(_bstr_t("AuthFlags"),vAuth);

//set anonymoususer
if(bIsNeedUser)
{
iAds->Put(_bstr_t("AnonymousUserName"),_variant_t(lpUserName));
iAds->Put(_bstr_t("AnonymousUserPass"),_variant_t(lpPWD));
_variant_t var;
var.vt = VT_BOOL;
var.boolVal = FALSE;
iAds->Put(_bstr_t("AnonymousPasswordSync"),var);
WriteText(_T("AdsiCreateWeb"),_T("set anonymoususer if bIsNeedUser=true"));
}
else
{
_variant_t var;
var.vt = VT_BOOL;
var.boolVal = TRUE;
iAds->Put(_bstr_t("AnonymousPasswordSync"),var);
WriteText(_T("AdsiCreateWeb"),_T("set anonymoususer if bIsNeedUser=false"));
}

_variant_t vFlag;
vFlag.vt = VT_I4;
vFlag.intVal = 0x40000000;
iAds->Put(_bstr_t("DirBrowseFlags"),vFlag);

_variant_t vBool;
vBool.vt = VT_BOOL;
vBool.boolVal = TRUE;
iAds->Put(_bstr_t("AspAllowOutOfProcComponents"),vBool);
iAds->Put(_bstr_t("AccessRead"),vBool);
iAds->Put(_bstr_t("AccessScript"),vBool);
iAds->Put(_bstr_t("AspEnableParentPaths"),vBool);
//iAds->Put(_bstr_t("EnableDirBrowsing"),vBool);
iAds->Put(_bstr_t("DefaultDoc"),_variant_t("default.html,default.asp,default.aspx"));

iAds->Put(_bstr_t("AppFriendlyName"),_variant_t(_bstr_t(lpVName)));

//save info
hr = iAds->SetInfo();
if(FAILED(hr))
{
WriteText(_T("InternalCreateWeb "),_T("iAds->SetInfo() : save info unsuccess "));
goto clean;
}

//get AppCreate's dispid
DISPID dispid;
OLECHAR FAR* szMember = L"AppCreate";
iAds->GetIDsOfNames(IID_NULL,&szMember,1, LOCALE_SYSTEM_DEFAULT,&dispid);

DISPPARAMS dispParms;
dispParms.cArgs = 1;
dispParms.cNamedArgs = 0;
dispParms.rgdispidNamedArgs = NULL;
_variant_t argVal;
argVal.vt=VT_BOOL;
argVal.boolVal = TRUE;
dispParms.rgvarg = &argVal;
//invoke AppCreate
hr = iAds->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_METHOD,&dispParms,NULL,NULL,NULL);
if(FAILED(hr))
{
WriteText(_T("InternalCreateWeb  faild "),_T("Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_METHOD,&dispParms,NULL,NULL,NULL)"));
goto clean;
}
bRet = InternalSetScriptMaps(iAds);
}
catch(_com_error& err)
{
GetComErr(_T("InternalCreateWeb"),err);
}
catch(...)
{
GetError(_T("InternalCreateWeb"));
}
clean:
if(iAds)
iAds->Release();
if(iContainer)
iContainer->Release();
return bRet;
}

BOOL InternalCreateWeb(LPCTSTR lpVName,LPCTSTR lpPath,LPCTSTR lpUserName,LPCTSTR lpPWD,BOOL bIsNeedUser,UINT instance)
{
IADsContainer* iContainer = NULL;
IADs* iAds = NULL;

BOOL bRet = FALSE;
WriteText(_T("SetupKit.dll "),_T("InternalCreateWeb(LPCTSTR lpVName,LPCTSTR lpPath,LPCTSTR lpUserName,LPCTSTR lpPWD,BOOL bIsNeedUser,UINT instance)"));
try
{
if(!InternalGetRoot(instance,IID_IADsContainer,(void**)&iContainer))
{
goto clean;
}
ASSERT(iContainer);
HRESULT hr = iContainer->Create(_bstr_t("IIsWebVirtualDir"),_bstr_t(lpVName),(IDispatch**)&iAds);
ASSERT(iAds);
if(FAILED(hr))
{
goto clean;
}

//set path
iAds->Put(_bstr_t("Path"),_variant_t(lpPath));

_variant_t vAuth;
vAuth.vt = VT_I4;
vAuth.intVal = 0x00000001;
iAds->Put(_bstr_t("AuthFlags"),vAuth);

//set anonymoususer
if(bIsNeedUser)
{
iAds->Put(_bstr_t("AnonymousUserName"),_variant_t(lpUserName));
iAds->Put(_bstr_t("AnonymousUserPass"),_variant_t(lpPWD));
_variant_t var;
var.vt = VT_BOOL;
var.boolVal = FALSE;
iAds->Put(_bstr_t("AnonymousPasswordSync"),var);
WriteText(_T("AdsiCreateWeb"),_T("set anonymoususer if bIsNeedUser=true"));
}
else
{
_variant_t var;
var.vt = VT_BOOL;
var.boolVal = TRUE;
iAds->Put(_bstr_t("AnonymousPasswordSync"),var);
WriteText(_T("AdsiCreateWeb"),_T("set anonymoususer if bIsNeedUser=false"));
}

_variant_t vFlag;
vFlag.vt = VT_I4;
vFlag.intVal = 0x40000000;
iAds->Put(_bstr_t("DirBrowseFlags"),vFlag);

_variant_t vBool;
vBool.vt = VT_BOOL;
vBool.boolVal = TRUE;
iAds->Put(_bstr_t("AspAllowOutOfProcComponents"),vBool);
iAds->Put(_bstr_t("AccessRead"),vBool);
iAds->Put(_bstr_t("AccessScript"),vBool);
iAds->Put(_bstr_t("AspEnableParentPaths"),vBool);
//iAds->Put(_bstr_t("EnableDirBrowsing"),vBool);
iAds->Put(_bstr_t("DefaultDoc"),_variant_t("default.html,default.asp,default.aspx"));

iAds->Put(_bstr_t("AppFriendlyName"),_variant_t(_bstr_t(lpVName)));

//save info
hr = iAds->SetInfo();
if(FAILED(hr))
{
WriteText(_T("InternalCreateWeb "),_T("iAds->SetInfo() : save info unsuccess "));
goto clean;
}

//get AppCreate's dispid
DISPID dispid;
OLECHAR FAR* szMember = L"AppCreate";
iAds->GetIDsOfNames(IID_NULL,&szMember,1, LOCALE_SYSTEM_DEFAULT,&dispid);

DISPPARAMS dispParms;
dispParms.cArgs = 1;
dispParms.cNamedArgs = 0;
dispParms.rgdispidNamedArgs = NULL;
_variant_t argVal;
argVal.vt=VT_BOOL;
argVal.boolVal = TRUE;
dispParms.rgvarg = &argVal;
//invoke AppCreate
hr = iAds->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD,&dispParms,NULL,NULL,NULL);
if(FAILED(hr))
{
WriteText(_T("InternalCreateWeb  faild "),_T("Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_METHOD,&dispParms,NULL,NULL,NULL)"));
goto clean;
}
bRet = InternalSetScriptMaps(iAds);
}
catch(_com_error& err)
{
GetComErr(_T("InternalCreateWeb"),err);
}
catch(...)
{
GetError(_T("InternalCreateWeb"));
}
clean:
if(iAds)
iAds->Release();
if(iContainer)
iContainer->Release();
return bRet;
}

//创建网站根据不同的名称
BOOL _stdcall AdsiCreateWebWithSiteName(LPCTSTR lpSiteName,LPCTSTR lpVDirectoryName,LPCTSTR lpPath,LPCTSTR lpUserName,LPCTSTR lpPWD,BOOL bIsNeedUser)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

BOOL bRet = FALSE;

CoInitialize(NULL);

try
{
TCHAR szMsg[255];
szMsg[0] = '\0';
_tcsncat(szMsg,lpVDirectoryName,_tcslen(lpVDirectoryName));
WriteText(_T("AdsiCreateWeb"),szMsg);

bRet = InternalCreateWebWithSiteName(lpSiteName,lpVDirectoryName,lpPath,lpUserName,lpPWD,bIsNeedUser,1);
}
catch(_com_error &err)
{
GetComErr(_T("AdsiCreateWeb"),err);
}
catch(...)
{
GetError(_T("AdsiCreateWeb"));
}
CoUninitialize();
return bRet;
}

///////////////////////////////////////////////
//   CreateVirtualDirection参数说明
//   lpszVirtualDirName需要建立的虚拟目录的目录名字
//   lpszDiskPath   需要建立虚拟目录的本地磁盘目录
//////////////////////////////////////////////
BOOL _stdcall AdsiCreateVirtualDirection(LPCTSTR  lpszVirtualDirName,LPCTSTR   lpszDiskPath)
{
CoInitialize(NULL);
IADsContainer*   iContainer;
IADs*   iAds;

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();
}
CoUninitialize();
return   FALSE;
}

//删除网站标识
BOOL _stdcall AdsiDeleteIdentifier(LPCTSTR m_localidentifier)
{
WriteText(_T("AdsiDeleteIdentifier"),_T("start "));
CoInitialize(NULL);
if(m_localidentifier==NULL)
{
return   FALSE;
}
IADsContainer   *pCont=NULL;
IADs*   pAds=NULL;
IADs*   pVrAds=NULL;
IADsServiceOperations   *pSrvOp=NULL;
IDispatch   *pDisp   =   NULL;
IDispatch   *pVrDisp   =   NULL;
_bstr_t   WNumer=_bstr_t(m_localidentifier);
HRESULT   hr;
if(ADsGetObject(L"IIS://localhost/w3svc",IID_IADsContainer,(void**)&pCont)==S_OK)
{
//如果标识没有被使用,直接的创建
pCont->Delete(L"IIsWebServer", WNumer);
pCont->Release();
}
CoUninitialize();
WriteText(_T("AdsiDeleteIdentifier"),_T("  end"));
return   true;
}

//创建网站标识
BOOL _stdcall AdsiCreateIdentifier(LPCTSTR m_localidentifier)
{
WriteText(_T("AdsiCreateIdentifier"),_T("start "));
CoInitialize(NULL);
if(m_localidentifier==NULL)
{
return   FALSE;
}
IADsContainer   *pCont=NULL;
IADs*   pAds=NULL;
IADs*   pVrAds=NULL;
IADsServiceOperations   *pSrvOp=NULL;
IDispatch   *pDisp   =   NULL;
IDispatch   *pVrDisp   =   NULL;
_bstr_t   WNumer=_bstr_t(m_localidentifier);
HRESULT   hr;
if(ADsGetObject(L"IIS://localhost/w3svc",IID_IADsContainer,(void**)&pCont)==S_OK)
{
//如果标识没有被使用,直接的创建
pCont->Delete(L"IIsWebServer", WNumer);
if(pCont->Create(L"IIsWebServer",WNumer,&pDisp)==S_OK)
{

}
pCont->Release();
}
CoUninitialize();
WriteText(_T("AdsiCreateIdentifier"),_T("  end"));
return   true;
}

//创建网站
BOOL _stdcall  AdsiCreateWebServer(LPCTSTR m_sitename,LPCTSTR bindaddress,LPCTSTR domain,LPCTSTR pathname,LPCTSTR m_localidentifier)
{
WriteText(_T("AdsiCreateWebServer"),_T("  start"));
CoInitialize(NULL);
if(bindaddress==NULL||NULL==domain||NULL==pathname)
{
return   FALSE;
}
IADsContainer   *pCont=NULL;
IADs*   pAds=NULL;
IADs*   pVrAds=NULL;
IADsServiceOperations   *pSrvOp=NULL;
IDispatch   *pDisp   =   NULL;
IDispatch   *pVrDisp   =   NULL;
_bstr_t   WNumer=_bstr_t(m_localidentifier);
_bstr_t   newBindings=_bstr_t(bindaddress)+":"+domain;
HRESULT   hr;
if(ADsGetObject(L"IIS://localhost/w3svc",IID_IADsContainer,(void**)&pCont)==S_OK)
{
//如果标识没有被使用,直接的创建
pCont->Delete(L"IIsWebServer", WNumer);
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(m_sitename)));
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)
{
//先删除网站
pCont->Delete(_bstr_t("IIsWebServer"),   _bstr_t(m_sitename));
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(true));
pVrAds->Put(L"AccessScript",_variant_t(true));
pVrAds->Put(L"EnableDirBrowsing",_variant_t(true));
pVrAds->Put(L"Path",_variant_t(pathname));
pVrAds->Put(L"AppRoot",_variant_t(pathname));
pVrAds->SetInfo();
pVrAds->Release();
pAds->Release();
pCont->Release();
}
hr=pSrvOp->Start();
hr=pSrvOp->Release();

}
}
}
if(pVrDisp)
{
pVrDisp->Release();
}
if(pDisp)
{
pDisp->Release();
}
if(pSrvOp)
{
pSrvOp->Release();
}
CoUninitialize();
WriteText(_T("AdsiCreateWebServer"),_T("  end"));
return   true;
}

BOOL _stdcall AdsiCreateWeb(LPCTSTR lpVDirectoryName,LPCTSTR lpPath,LPCTSTR lpUserName,LPCTSTR lpPWD,BOOL bIsNeedUser)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

BOOL bRet = FALSE;

CoInitialize(NULL);

try
{
TCHAR szMsg[255];
szMsg[0] = '\0';
_tcsncat(szMsg,lpVDirectoryName,_tcslen(lpVDirectoryName));
WriteText(_T("AdsiCreateWeb"),szMsg);

bRet = InternalCreateWeb(lpVDirectoryName,lpPath,lpUserName,lpPWD,bIsNeedUser,1);
}
catch(_com_error &err)
{
GetComErr(_T("AdsiCreateWeb"),err);
}
catch(...)
{
GetError(_T("AdsiCreateWeb"));
}
CoUninitialize();
return bRet;
}

BOOL _stdcall AdsiCreateWebWithPath(LPCTSTR lpVDirectoryName,LPCTSTR lpPath,LPCTSTR instance)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

BOOL bRet = FALSE;

CoInitialize(NULL);

IADs *iAds = NULL;
IADsContainer *iContainer = NULL;

try
{
TCHAR szMsg[255];
szMsg[0] = '\0';
_tcsncat(szMsg,lpVDirectoryName,_tcslen(lpVDirectoryName));
WriteText(_T("AdsiCreateWebWithPath"),szMsg);

UINT inst = 1;
if(instance&&_tcslen(instance))
inst = FindInstance(instance);
if(!inst)
goto clean;

if(InternalGetRoot(inst,IID_IADsContainer,(void**)&iContainer))
{
ASSERT(iContainer);

HRESULT hr = iContainer->Create(_bstr_t("IIsWebVirtualDir"),_bstr_t(lpPath),(IDispatch**)&iAds);
ASSERT(iAds);
if(FAILED(hr))
{
goto clean;
}
_variant_t vFlag;
vFlag.vt = VT_I4;
vFlag.intVal = 0x40000000;
iAds->Put(_bstr_t("DirBrowseFlags"),vFlag);

_variant_t vBool;
vBool.vt = VT_BOOL;
vBool.boolVal = TRUE;
iAds->Put(_bstr_t("AspAllowOutOfProcComponents"),vBool);
iAds->Put(_bstr_t("AccessRead"),vBool);
iAds->Put(_bstr_t("AccessScript"),vBool);
iAds->Put(_bstr_t("AspEnableParentPaths"),vBool);
//iAds->Put(_bstr_t("EnableDirBrowsing"),vBool);
iAds->Put(_bstr_t("DefaultDoc"),_variant_t("default.html,default.asp,default.aspx"));
iAds->Put(_bstr_t("AnonymousPasswordSync"),vBool);

iAds->Put(_bstr_t("AppFriendlyName"),_variant_t(_bstr_t(lpVDirectoryName)));

_variant_t vAuth;
vAuth.vt = VT_I4;
vAuth.intVal = 0x00000001;
iAds->Put(_bstr_t("AuthFlags"),vAuth);

iAds->SetInfo();

DISPID dispid;
OLECHAR FAR* szMember = L"AppCreate";
iAds->GetIDsOfNames(IID_NULL,&szMember,1, LOCALE_SYSTEM_DEFAULT,&dispid);

COleDispatchDriver driver;
driver.AttachDispatch(iAds,FALSE);
BYTE pbParam[] = VTS_BOOL;
_variant_t vParam;
vParam.vt = VT_BOOL;
vParam.boolVal = TRUE;
driver.InvokeHelper(dispid,DISPATCH_METHOD,NULL,NULL,pbParam,vParam);

bRet = InternalSetScriptMaps(iAds);
}
if(iAds)
{
iAds->Release();
}
if(iContainer)
{
iContainer->Release();
}
}
catch(_com_error& err)
{
GetComErr(_T("AdsiCreateWebWithPath"),err);
}
catch(...)
{
GetError(_T("AdsiCreateWebWithPath"));
}
clean:
if(iAds)
iAds->Release();
if(iContainer)
iContainer->Release();
CoUninitialize();
return bRet;
}

BOOL DeleteWeb(LPCTSTR lpVDirectoryName,UINT inst)
{
BOOL bRet = FALSE;
IADsContainer* iContainer = NULL;

try
{
if(!IsExist(lpVDirectoryName,inst))
goto clean;

if(!InternalGetRoot(inst,IID_IADsContainer,(void**)&iContainer))
goto clean;
ASSERT(iContainer);

//delete virtual web directory
HRESULT hr = iContainer->Delete(_bstr_t("IIsWebVirtualDir"),_bstr_t(lpVDirectoryName));
if(SUCCEEDED(hr))
bRet = TRUE;
}
catch(_com_error& err)
{
GetComErr(_T("Internal DeleteWeb"),err);
}
catch(...)
{
GetError(_T("Internal DeleteWeb"));
}
clean:
if(iContainer)
iContainer->Release();
return bRet;
}

BOOL _stdcall AdsiDeleteWeb(LPCTSTR lpVDirectory)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

BOOL bRet = FALSE;

CoInitialize(NULL);

try
{
TCHAR szMsg[255];
szMsg[0] = '\0';
_tcsncat(szMsg,lpVDirectory,_tcslen(lpVDirectory));
WriteText(_T("AdsiDeleteWeb"),szMsg);

bRet = DeleteWeb(lpVDirectory,1);
}
catch(_com_error& err)
{
GetComErr(_T("AdsiDeleteWeb"),err);
}
catch(...)
{
GetError(_T("AdsiDeleteWeb"));
}

CoUninitialize();
return bRet;
}

BOOL SetHttpErrorPage(LPCTSTR lpVirtualName,UINT nErrorCode,UINT nSubErrorCode,LPCTSTR lpFilePath)
{
IADs* iAds = NULL;

if(InternalGetObject(1,lpVirtualName,IID_IADs,(void**)&iAds))
{
ASSERT(iAds);

TCHAR szError[MAX_PATH+1];
szError[0] = '\0';
_stprintf(szError,_T("%d,%d,FILE,%s"),nErrorCode,nSubErrorCode,lpFilePath);
iAds->Put(_bstr_t("HttpErrors"),_variant_t(szError));
HRESULT hr = iAds->SetInfo();
iAds->Release();
iAds = NULL;
return SUCCEEDED(hr);
}

return FALSE;
}

BOOL _stdcall AdsiSetHttpErrorPage(LPCTSTR lpVirtualName,UINT nErrorCode,UINT nSubErrorCode,LPCTSTR lpFilePath)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

CoInitialize(NULL);

BOOL bRet = FALSE;

try
{
TCHAR szMsg[255];
szMsg[0] = '\0';
_stprintf(szMsg,_T("%s ErrorCode:%d SubErrCode:%d"),lpVirtualName,nErrorCode,nSubErrorCode);
WriteText(_T("AdsiSetHttpErrorPage"),szMsg);

bRet = SetHttpErrorPage(lpVirtualName,nErrorCode,nSubErrorCode,lpFilePath);
}
catch(_com_error& err)
{
GetComErr(_T("AdsiSetHttpErrorPage"),err);
}
catch(...)
{
GetError(_T("AdsiSetHttpErrorPage"));
}
CoUninitialize();
return bRet;
}

BOOL CreateSubApp(LPCTSTR lpVirtualName,LPCTSTR lpVirtualSubName,LPCTSTR lpPath)
{
IADs* iAds = NULL;
IADsContainer* iSubContainer = NULL;
IADs* iSubAds = NULL;

BOOL bRet = FALSE;

try
{
if(!InternalGetObject(1,lpVirtualName,IID_IADs,(void**)&iAds))
goto clean;
ASSERT(iAds);

_variant_t pvUser;
_variant_t pvPass;
iAds->Get(_bstr_t("AnonymousUserName"),&pvUser);
iAds->Get(_bstr_t("AnonymousUserPass"),&pvPass);

HRESULT hr = iAds->QueryInterface(IID_IADsContainer,(void**)&iSubContainer);
ASSERT(iSubContainer);
if(FAILED(hr))
goto clean;

hr = iSubContainer->Create(_bstr_t("IIsWebDirectory"),_bstr_t(lpVirtualSubName),
(IDispatch**)&iSubAds);
ASSERT(iSubAds);
if(FAILED(hr))
goto clean;

iSubAds->Put(_bstr_t("Path"),_variant_t(lpPath));
iSubAds->Put(_bstr_t("AnonymousUserName"),pvUser);
iSubAds->Put(_bstr_t("AnonymousUserPass"),pvPass);

_variant_t var;
var.vt = VT_BOOL;
var.boolVal = FALSE;
iSubAds->Put(_bstr_t("AnonymousPasswordSync"),var);
var.boolVal = TRUE;
iSubAds->Put(_bstr_t("AspEnableParentPaths"),var);

hr = iSubAds->SetInfo();
if(FAILED(hr))
goto clean;

DISPID dispid;
OLECHAR FAR* szMember = L"AppCreate";
iSubAds->GetIDsOfNames(IID_NULL,&szMember,1, LOCALE_SYSTEM_DEFAULT,&dispid);

DISPPARAMS dispParms;
dispParms.cArgs = 1;
dispParms.cNamedArgs = 0;
dispParms.rgdispidNamedArgs = NULL;
COleVariant argVal;
argVal.vt=VT_BOOL;
argVal.boolVal = TRUE;
dispParms.rgvarg = &argVal;

//invoke AppCreate
hr = iSubAds->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_METHOD,&dispParms,
NULL,NULL,NULL);
if(FAILED(hr))
goto clean;

//add script maps
bRet = InternalSetScriptMaps(iSubAds);

}
catch(_com_error& err)
{
GetComErr(_T("CreateSubApp"),err);
}
catch(...)
{
GetError(_T("CreateSubApp"));
}
clean:
if(iAds)
iAds->Release();
if(iSubContainer)
iSubContainer->Release();
if(iSubAds)
iSubAds->Release();
return bRet;
}

BOOL _stdcall AdsiCreateSubApp(LPCTSTR lpVirtualName,LPCTSTR lpVirtualSubName,LPCTSTR lpPath)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

CoInitialize(NULL);

BOOL bRet = FALSE;

try
{
TCHAR szMsg[255];
szMsg[0] = '\0';
_stprintf(szMsg,_T("%s %s"),lpVirtualName,lpVirtualSubName);
WriteText(_T("AdsiCreateSubApp"),szMsg);

bRet = CreateSubApp(lpVirtualName,lpVirtualSubName,lpPath);
}
catch(_com_error& err)
{
GetComErr(_T("AdsiCreateSubApp"),err);
}
catch(...)
{
GetError(_T("AdsiCreateSubApp"));
}
CoUninitialize();
return bRet;
}

BOOL _stdcall AdsiIsExist(LPCTSTR lpVirtualName)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

CoInitialize(NULL);

BOOL bRet = FALSE;

try
{
bRet = IsExist(lpVirtualName,1);
}
catch(_com_error& err)
{
GetComErr(_T("AdsiIsExist"),err);
}
catch(...)
{
GetError(_T("AdsiIsExist"));
}
TCHAR szMsglpVirtualName[255];
szMsglpVirtualName[0] = '\0';
_stprintf(szMsglpVirtualName,_T("%s"),lpVirtualName);
if(bRet)
{
WriteText(_T("AdsiIsExist=EXIST"),szMsglpVirtualName);
}
else
{
WriteText(_T("AdsiIsExist NOCREATE SUCCESS "),szMsglpVirtualName);
}
CoUninitialize();
return bRet;
}

BOOL _stdcall AdsiSetConnectionTimeout(LPCTSTR lpInstance,UINT time)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

USES_CONVERSION;

CoInitialize(NULL);

IADsContainer* iContainer = NULL;
IADs* iAds = NULL;

try
{
TCHAR szMsg[255];
szMsg[0] = '\0';
_stprintf(szMsg,_T("%s %d"),lpInstance,time);
WriteText(_T("AdsiSetConnectionTimeout"),szMsg);

_variant_t vProp;
vProp.vt = VT_UINT;
vProp.uintVal = time;

//set root webserver connection timeout
HRESULT hr = ADsGetObject(L"IIS://localhost/w3svc",IID_IADs,(void**)&iAds);
if(FAILED(hr))
goto error;
ASSERT(iAds);

iAds->Put(_bstr_t("ConnectionTimeout"),vProp);
iAds->SetInfo();
iAds->Release();
iAds = NULL;

UINT ins = 1;
if(lpInstance&&_tcslen(lpInstance))
ins = FindInstance(lpInstance);
TCHAR inst[3];
_itot(ins,inst,10);

WCHAR szPath[MAX_PATH+1];
szPath[0] = '\0';
wcscpy(szPath,L"IIS://localhost/w3svc/");
LPWSTR lpwInst = T2W(inst);
wcsncat(szPath,lpwInst,wcslen(lpwInst));
hr = ADsGetObject(szPath,IID_IADs,(void**)&iAds);
if(FAILED(hr))
goto error;
ASSERT(iAds);

iAds->Put(_bstr_t("ConnectionTimeout"),vProp);
iAds->SetInfo();
iAds->Release();
iAds = NULL;

//set webserver connection timeout,for IIS6.0
hr = ADsGetObject(L"IIS://localhost/w3svc",IID_IADsContainer,(void**)&iContainer);
if(FAILED(hr))
goto error;
ASSERT(iContainer);

hr = iContainer->GetObject(_bstr_t("IIsWebServer"),_bstr_t(inst),(IDispatch**)&iAds);
iContainer->Release();
iContainer = NULL;
if(FAILED(hr))
goto exit;
ASSERT(iAds);

iAds->Put(_bstr_t("ConnectionTimeout"),vProp);
iAds->SetInfo();
iAds->Release();

exit:
CoUninitialize();
return TRUE;
}
catch(_com_error& err)
{
GetComErr(_T("AdsiSetConnectionTimeout"),err);
}
catch(...)
{
GetError(_T("AdsiSetConnectionTimeout"));
}
error:
CoUninitialize();
return FALSE;

}

BOOL _stdcall AdsiSetSession(LPCTSTR lpVirtualName,LONG time)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

CoInitialize(NULL);

BOOL bRet = FALSE;
IADs* iAds = NULL;

try
{
TCHAR szMsg[255];
szMsg[0] = '\0';
_stprintf(szMsg,_T("%s %d"),lpVirtualName,time);
WriteText(_T("AdsiSetSession"),szMsg);

if(!InternalGetObject(1,lpVirtualName,IID_IADs,(void**)&iAds))
goto error;
ASSERT(iAds);

_variant_t pvSession(time);
iAds->Put(_bstr_t("AspSessionTimeout"),pvSession);

HRESULT hr = iAds->SetInfo();
bRet = SUCCEEDED(hr);
}
catch(_com_error& err)
{
GetComErr(_T("AdsiSetSession"),err);
}
catch(...)
{
GetError(_T("AdsiSetSession"));
}
error:
if(iAds)
iAds->Release();
CoUninitialize();
return bRet;
}

UINT _stdcall AdsiCreateWebSite(LPCTSTR lpSiteName,LPCTSTR lpBind,LPCTSTR lpRoot)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

CoInitialize(NULL);

IADsContainer* iContainer = NULL;
IADs* iAds = NULL;
IADs* iServer = NULL;
SAFEARRAY *pNewArray = NULL;
//HRESULT hr;
try
{
TCHAR szMsg[255];
szMsg[0] = '\0';
_tcsncat(szMsg,lpSiteName,_tcslen(lpSiteName));
_tcsncat(szMsg,lpBind,_tcslen(lpBind));
WriteText(_T("AdsiCreateWebSite"),szMsg);

HRESULT hr = ADsGetObject(L"IIS://localhost/w3svc",IID_IADsContainer,(void**)&iContainer);
ASSERT(iContainer);
if(FAILED(hr))
goto error;

TCHAR inst[3];
UINT count=1;
_itot(count,inst,10);

//get IIS web server
hr = iContainer->GetObject(_bstr_t("IIsWebServer"),bstr_t(inst),(IDispatch**)&iAds);
ASSERT(iAds);
if(FAILED(hr))
{
iContainer->Release();
goto error;
}

//enum web server
while(iAds)
{
iAds->Release();
iAds = NULL;
count++;
_itot(count,inst,10);
//get IIS web server
iContainer->GetObject(_bstr_t("IIsWebServer"),_bstr_t(inst),
(IDispatch**)&iAds);
}

hr = iContainer->Create(_bstr_t("IIsWebServer"),_bstr_t(inst),(IDispatch**)&iAds);
ASSERT(iAds);
iContainer->Release();
iContainer = NULL;
if(FAILED(hr))
goto error;

iServer = iAds;
iAds->AddRef();

_variant_t vName(lpSiteName);

_variant_t vSize;
vSize.vt = VT_I4;
vSize.ulVal = 1;

_bstr_t bstrBind(lpBind);
_variant_t vBind;
vBind.vt = VT_BSTR;
vBind.bstrVal = bstrBind;

_variant_t vBindList;
vBindList.vt = VT_ARRAY | VT_VARIANT;

SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = 1;
pNewArray = SafeArrayCreate(VT_VARIANT,1,rgsabound);
LONG i =0;
hr = SafeArrayPutElement(pNewArray, &i, (void*)&vBind);
vBindList.parray = pNewArray;
hr = iAds->Put(_bstr_t("ServerBindings"),vBindList);
iAds->Put(_bstr_t("ServerComment"),vName);
iAds->Put(_bstr_t("ServerSize"),vSize);

_variant_t varEnable;
varEnable.vt = VT_BOOL;
varEnable.boolVal = TRUE;
iAds->Put(_bstr_t("AspEnableParentPaths"),varEnable);

hr = iAds->SetInfo();
if(FAILED(hr))
{
iAds->Release();
iServer->Release();
goto error;
}

hr = iAds->QueryInterface(IID_IADsContainer,(void**)&iContainer);
ASSERT(iContainer);
iAds->Release();
iAds = NULL;
if(FAILED(hr))
{
iServer->Release();
goto error;
}

hr = iContainer->Create(_bstr_t("IIsWebVirtualDir"),_bstr_t("Root"),(IDispatch**)&iAds);
ASSERT(iAds);
iContainer->Release();
iContainer = NULL;
if(FAILED(hr))
{
iServer->Release();
goto error;
}

iAds->Put(_bstr_t("Path"),_variant_t(lpRoot));

_variant_t var;
var.vt = VT_BOOL;
var.boolVal = TRUE;
iAds->Put(_bstr_t("AnonymousPasswordSync"),var);
iAds->Put(_bstr_t("AspAllowOutOfProcComponents"),var);
iAds->Put(_bstr_t("AccessRead"),var);
iAds->Put(_bstr_t("AccessScript"),var);
//iAds->Put(_bstr_t("EnableDirBrowsing"),var);
iAds->Put(_bstr_t("AspEnableParentPaths"),varEnable);

hr = iAds->SetInfo();
if(FAILED(hr))
{
iServer->Release();
iAds->Release();
goto error;
}

DISPID dispid;
OLECHAR FAR* szMember = L"AppCreate";
iAds->GetIDsOfNames(IID_NULL,&szMember,1,
LOCALE_SYSTEM_DEFAULT,&dispid);

DISPPARAMS dispParms;
dispParms.cArgs = 1;
dispParms.cNamedArgs = 0;
dispParms.rgdispidNamedArgs = NULL;
COleVariant argVal;
argVal.vt=VT_BOOL;
argVal.boolVal = TRUE;
dispParms.rgvarg = &argVal;
//invoke AppCreate
hr = iAds->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD,&dispParms,NULL,NULL,NULL);

iAds->Release();
iAds = NULL;
if(FAILED(hr))
{
iServer->Release();
goto error;
}

//start service
DISPID startDispid;
OLECHAR FAR* szStartMember = L"Start";
hr = iServer->GetIDsOfNames(IID_NULL,&szStartMember,1, LOCALE_SYSTEM_DEFAULT,&startDispid);

DISPPARAMS startDispParms;
startDispParms.cArgs = 0;
startDispParms.cNamedArgs = 0;
startDispParms.rgdispidNamedArgs = NULL;
startDispParms.rgvarg = NULL;

//invoke start method
hr = iServer->Invoke(startDispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD,&startDispParms,NULL,NULL,NULL);
iServer->Release();
iServer = NULL;
if(FAILED(hr))
goto error;
CoUninitialize();
return count;

}
catch(_com_error& err)
{
GetComErr(_T("AdsiCreateWebSite"),err);
}
catch(...)
{
GetError(_T("AdsiCreateWebSite"));
}
error:
CoUninitialize();
return 0;
}

BOOL _stdcall AdsiStartIIS(LPCTSTR instance)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

BOOL bRet = FALSE;

CoInitialize(NULL);

IADsContainer* iContainer = NULL;
IADs* iAds = NULL;

try
{
TCHAR szMsg[255];
szMsg[0] = '\0';
_tcsncat(szMsg,instance,_tcslen(instance));
WriteText(_T("AdsiStartIIS"),szMsg);

UINT ins = FindInstance(instance);

HRESULT hr = ADsGetObject(L"IIS://localhost/w3svc",IID_IADsContainer,
(void**)&iContainer);
ASSERT(iContainer);
if(FAILED(hr))
goto error;

TCHAR inst[20];
_itot(ins,inst,10);

hr = iContainer->GetObject(_bstr_t("IIsWebServer"),_bstr_t(inst),
(IDispatch**)&iAds);
ASSERT(iAds);
if(FAILED(hr))
goto error;

DISPID dispid;
OLECHAR FAR* szMember = L"Start";
hr = iAds->GetIDsOfNames(IID_NULL,&szMember,1, LOCALE_SYSTEM_DEFAULT,&dispid);

DISPPARAMS dispParms;
dispParms.cArgs = 0;
dispParms.cNamedArgs = 0;
dispParms.rgdispidNamedArgs = NULL;
dispParms.rgvarg = NULL;

//invoke start method
hr = iAds->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD,&dispParms,NULL,NULL,NULL);
if(SUCCEEDED(hr))
bRet = TRUE;
}
catch(_com_error& err)
{
GetComErr(_T("AdsiStartIIS"),err);
}
catch(...)
{
GetError(_T("AdsiStartIIS"));
}
error:
if(iAds)
iAds->Release();
if(iContainer)
iContainer->Release();
CoUninitialize();
return bRet;
}

BOOL _stdcall AdsiStopIIS(LPCTSTR instance)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

BOOL bRet = FALSE;

CoInitialize(NULL);

IADsContainer* iContainer = NULL;
IADs* iAds = NULL;

try
{
TCHAR szMsg[255];
szMsg[0] = '\0';
_tcsncat(szMsg,instance,_tcslen(instance));
WriteText(_T("AdsiStopIIS"),szMsg);

UINT ins = FindInstance(instance);

HRESULT hr = ADsGetObject(L"IIS://localhost/w3svc",IID_IADsContainer,
(void**)&iContainer);
ASSERT(iContainer);
if(FAILED(hr))
goto error;

TCHAR inst[20];
_itot(ins,inst,10);

hr = iContainer->GetObject(_bstr_t("IIsWebServer"),
_bstr_t(inst),(IDispatch**)&iAds);
ASSERT(iAds);
if(FAILED(hr))
goto error;

DISPID dispid;
OLECHAR FAR* szMember = L"Stop";
hr = iAds->GetIDsOfNames(IID_NULL,&szMember,1, LOCALE_SYSTEM_DEFAULT,&dispid);

DISPPARAMS dispParms;
dispParms.cArgs = 0;
dispParms.cNamedArgs = 0;
dispParms.rgdispidNamedArgs = NULL;
dispParms.rgvarg = NULL;

//invoke start method
hr = iAds->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD,&dispParms,NULL,NULL,NULL);
if(SUCCEEDED(hr))
bRet = TRUE;
}
catch(_com_error& err)
{
GetComErr(_T("AdsiStartIIS"),err);
}
catch(...)
{
GetError(_T("AdsiStartIIS"));
}
error:
if(iAds)
iAds->Release();
if(iContainer)
iContainer->Release();
CoUninitialize();
return bRet;
}

BOOL _stdcall AdsiDeleteWebSite(LPCTSTR lpSiteName)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

CoInitialize(NULL);

IADsContainer* iContainer = NULL;
IADs* iAds = NULL;
IADs* iServer = NULL;
HRESULT hr;

try
{
TCHAR szMsg[255];
szMsg[0] = '\0';
_tcsncat(szMsg,lpSiteName,_tcslen(lpSiteName));
WriteText(_T("AdsiDeleteWebSite"),szMsg);

if(ADsGetObject(L"IIS://localhost/w3svc",
IID_IADsContainer,(void**)&iContainer)==S_OK)
{
TCHAR inst[20];
UINT i=1,ins=0;
_itot(i,inst,10);

//get IIS web server
hr = iContainer->GetObject(_bstr_t("IIsWebServer"),
_bstr_t(inst),(IDispatch**)&iAds);
if(FAILED(hr))
{
iContainer->Release();
goto error;
}
ASSERT(iAds);

VARIANT varName;
while(iAds)
{
iAds->Get(_bstr_t("ServerComment"),&varName);

_bstr_t bstrName(varName);
if(bstrName!=_bstr_t(lpSiteName))
{
i++;
_itot(i,inst,10);

iAds->Release();

//get IIS web server
iContainer->GetObject(_bstr_t("IIsWebServer"),
_bstr_t(inst),(IDispatch**)&iAds);
}
else
{
ins = i;
iServer = iAds;
iAds->AddRef();
iAds->Release();
break;
}
}

if(!ins)
{
iContainer->Release();
goto error;
}

//stop service
DISPID dispid;
OLECHAR FAR* szMember = L"Stop";
HRESULT hr = iServer->GetIDsOfNames(IID_NULL,&szMember,1, LOCALE_SYSTEM_DEFAULT,&dispid);
if(hr==S_OK)
{
DISPPARAMS dispParms;
dispParms.cArgs = 0;
dispParms.cNamedArgs = 0;
dispParms.rgdispidNamedArgs = NULL;
dispParms.rgvarg = NULL;

//invoke start method
iServer->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD,&dispParms,NULL,NULL,NULL);
}
iServer->Release();

_itot(ins,inst,10);
iContainer->Delete(_bstr_t("IIsWebServer"),_bstr_t(inst));

iContainer->Release();
VariantClear(&varName);
CoUninitialize();

return TRUE;
}
}
catch(_com_error& err)
{
GetComErr(_T("AdsiDeleteWebSite"),err);
}
catch(...)
{
GetError(_T("AdsiDeleteWebSite"));
}
error:
CoUninitialize();
return FALSE;
}

BOOL _stdcall AdsiCreateWebWithInstance(LPCTSTR lpVDirectoryName,LPCTSTR lpPath,LPCTSTR lpUserName,LPCTSTR lpPWD,BOOL bIsNeedUser,LPCTSTR instance)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

CoInitialize(NULL);

BOOL bRet = FALSE;

try
{
TCHAR szMsg[255];
szMsg[0] = '\0';
_tcsncat(szMsg,instance,_tcslen(instance));
_tcsncat(szMsg,_T(" "),1);
_tcsncat(szMsg,lpVDirectoryName,_tcslen(lpVDirectoryName));
WriteText(_T("AdsiCreateWebWithInstance"),szMsg);

UINT ins = 1;
if(instance&&_tcslen(instance))
ins = FindInstance(instance);
bRet = (InternalCreateWeb(lpVDirectoryName,lpPath,lpUserName,lpPWD,bIsNeedUser,ins)
&&SetScriptMaps(lpVDirectoryName,instance));
}
catch(_com_error& err)
{
GetComErr(_T("AdsiCreateWebWithInstance"),err);
}
catch(...)
{
GetError(_T("AdsiCreateWebWithInstance"));
}
CoUninitialize();
return bRet;
}

BOOL _stdcall AdsiDeleteWebWithInstance(LPCTSTR lpVDirectory,LPCTSTR instance)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

CoInitialize(NULL);

BOOL bRet = FALSE;

try
{
TCHAR szMsg[255];
szMsg[0] = '\0';
_tcsncat(szMsg,instance,_tcslen(instance));
_tcsncat(szMsg,_T(" "),1);
_tcsncat(szMsg,lpVDirectory,_tcslen(lpVDirectory));
WriteText(_T("AdsiDeleteWebWithInstance"),szMsg);

UINT ins = FindInstance(instance);
bRet = DeleteWeb(lpVDirectory,ins);
}
catch(_com_error& err)
{
GetComErr(_T("AdsiDeleteWebWithInstance"),err);
}
catch(...)
{
GetError(_T("AdsiDeleteWebWithInstance"));
}
CoUninitialize();
return bRet;
}

BOOL _stdcall AdsiEnableService(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

BOOL bRet = FALSE;

CoInitialize(NULL);

IADs* iAds = NULL;

try
{
WriteText(_T("AdsiEnableService"),_T(""));

HRESULT hr = ADsGetObject(L"IIS://localhost/w3svc",IID_IADs,(void**)&iAds);
ASSERT(iAds);
if(FAILED(hr))
goto error;

DISPID dispid;
OLECHAR FAR* szMember = L"EnableWebServiceExtension";
hr = iAds->GetIDsOfNames(IID_NULL,&szMember,1, LOCALE_SYSTEM_DEFAULT,&dispid);

DISPPARAMS dispParms;
dispParms.cArgs = 1;
dispParms.cNamedArgs = 0;
dispParms.rgdispidNamedArgs = NULL;
_variant_t argVal;
argVal.vt = VT_BSTR;
argVal.bstrVal = _bstr_t(L"ASP");
dispParms.rgvarg = &argVal;

//enable asp extension service
hr = iAds->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD,&dispParms,NULL,NULL,NULL);
if(FAILED(hr))
goto error;

argVal.bstrVal = _bstr_t(_T("ASP.NET v1.1.4322"));

//enable asp.net extension service
hr = iAds->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD,&dispParms,NULL,NULL,NULL);
if(FAILED(hr))
goto error;

OLECHAR FAR* member = L"EnableExtensionFile";
hr = iAds->GetIDsOfNames(IID_NULL,&member,1, LOCALE_SYSTEM_DEFAULT,&dispid);

//enable all isapi&cgi access
argVal.bstrVal = _bstr_t(_T("*.exe"));
hr = iAds->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD,&dispParms,NULL,NULL,NULL);
if(FAILED(hr))
goto error;

argVal.bstrVal = _bstr_t(_T("*.dll"));
hr = iAds->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD,&dispParms,NULL,NULL,NULL);

bRet = SUCCEEDED(hr);
}
catch(_com_error& err)
{
GetComErr(_T("AdsiEnableService"),err);
}
catch(...)
{
GetError(_T("AdsiEnableService"));
}
error:
if(iAds)
iAds->Release();
CoUninitialize();
return FALSE;
}

BOOL _stdcall AdsiIsExistIIS()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

CoInitialize(NULL);

IADsContainer* iContainer = NULL;

HRESULT hr = ADsGetObject(L"IIS://localhost/w3svc",IID_IADsContainer,(void**)&iContainer);
if(iContainer)
iContainer->Release();

CoUninitialize();

return SUCCEEDED(hr);
}

BOOL _stdcall AdsiSetKeepAlive(LPCTSTR lpInstance,BOOL bValue)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

BOOL bRet = FALSE;

CoInitialize(NULL);

IADs* iAds = NULL;

try
{
TCHAR szMsg[255];
szMsg[0] = '\0';
_tcsncat(szMsg,lpInstance,_tcslen(lpInstance));
WriteText(_T("AdsiSetKeepAlive"),szMsg);

WCHAR szInst[MAX_PATH+1];
szInst[0] = '\0';
wcscpy(szInst,L"IIS://localhost/w3svc/");
UINT inst = 1;
WCHAR instance[3];
instance[0] = '\0';
if(lpInstance&&_tcslen(lpInstance))
inst = FindInstance(lpInstance);
_itow(inst,instance,10);
wcsncat(szInst,instance,wcslen(instance));
HRESULT hr = ADsGetObject(szInst,IID_IADs,(void**)&iAds);
ASSERT(iAds);
if(FAILED(hr))
goto error;

_variant_t vProp;
vProp.vt = VT_BOOL;
vProp.boolVal = bValue;
iAds->Put(_bstr_t("AllowKeepAlive"),vProp);
hr = iAds->SetInfo();
bRet = SUCCEEDED(hr);
}
catch(_com_error& err)
{
GetComErr(_T("AdsiKeepAlive"),err);
}
catch(...)
{
GetError(_T("AdsiKeepAlive"));
}
error:
if(iAds)
iAds->Release();
CoUninitialize();
return bRet;
}

BOOL _stdcall AdsiSetMIMEType(LPCTSTR lpVDirectoryName,LPCTSTR lpExtension,LPCTSTR lpType)
{
OutputDebugString( _T("AdsiSetMIMEType"));
CoInitialize(NULL);
BOOL bRet = FALSE;
IADs* iAds = NULL;
try
{
if(!InternalGetObject(1,lpVDirectoryName,IID_IADs,(void**)&iAds))
{
OutputDebugString( _T("InternalGetObject FALSE"));
goto error;
}
else
{
OutputDebugString( _T("InternalGetObject SUCCESS"));
}
ASSERT(iAds);

bRet = InternalSetMIMEType(iAds,lpExtension,lpType);
}
catch(_com_error& err)
{
GetComErr(_T("AdsiSetMIMEType"),err);
}
catch(...)
{
GetError(_T("AdsiSetMIMEType"));
}
error:
if(iAds)
iAds->Release();
CoUninitialize();
return bRet;
}

BOOL _stdcall InternalSetMIMEType(IADs *iAds,LPCTSTR lpExt,LPCTSTR lpType)
{
OutputDebugString( _T("InternalSetMIMEType START"));
ASSERT(iAds);
BOOL bRet = FALSE;
VARIANT vProp;
VariantInit(&vProp);
vProp.vt = VT_ARRAY|VT_BSTR;

SAFEARRAY FAR* psa = NULL;
SAFEARRAY *pNewArray = NULL;
LONG lElements=0,lLBound=0,lUBound=0;

try
{
//get ScriptMaps from meta data
HRESULT hr = iAds->Get(_bstr_t("MimeMap"),&vProp);
if(FAILED(hr))
goto clean;

psa = V_ARRAY(&vProp);

ASSERT(psa);

hr = SafeArrayGetLBound(psa, 1, &lLBound);
hr = SafeArrayGetUBound(psa, 1, &lUBound);
lElements = lUBound-lLBound+1;

SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = lElements+1;
pNewArray = SafeArrayCreate(VT_VARIANT,1,rgsabound);

COleDispatchDriver driver;
//copy exsit MIME maps into new array
for(LONG i=0;i<lElements;i++)
{
_variant_t varValue;
CString strExt;

hr = SafeArrayGetElement(psa,&i,(void*)&varValue);
driver.AttachDispatch(varValue.pdispVal,FALSE);
driver.InvokeHelper(0x5,DISPATCH_PROPERTYGET,VT_BSTR,(void*)&strExt,NULL);
driver.DetachDispatch();
if(strExt==lpExt)
goto clean;
hr = SafeArrayPutElement(pNewArray,&i,(void*)&varValue);
}

//add MIME maps
LONG index = lElements;
_variant_t var;
var.vt = VT_DISPATCH;

COleException ex;
bRet = driver.CreateDispatch(_T("MimeMap"),&ex);
driver.SetProperty(0x5,VT_BSTR,CString(lpExt));
driver.SetProperty(0x4,VT_BSTR,CString(lpType));
var.pdispVal = driver.m_lpDispatch;
hr = SafeArrayPutElement(pNewArray,&index,(void*)&var);

VARIANT vNewProp;
VariantInit(&vNewProp);
vNewProp.vt = VT_ARRAY|VT_VARIANT;
V_ARRAY(&vNewProp) = pNewArray;
hr = iAds->Put(_bstr_t("MimeMap"),vNewProp);

hr = iAds->SetInfo();

bRet = SUCCEEDED(hr);
if(bRet)
{
OutputDebugString( _T("InternalSetMIMEType set success"));
}
else
{
OutputDebugString( _T("InternalSetMIMEType set false"));
}
}
catch(_com_error& err)
{
GetComErr(_T("InternalSetMIMEType"),err);
}
catch(...)
{
GetError(_T("InternalSetMIMEType"));
}
clean:
psa = NULL;
VariantClear(&vProp);
OutputDebugString( _T("InternalSetMIMEType END"));
return bRet;
}

BOOL  _stdcall AdsiGetWebRootWithBinding(BSTR* pbstrRoot, int nPort)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

CoInitialize(NULL);

IADsContainer* iContainer = NULL;

IEnumVARIANT *pEnum;
LPUNKNOWN     pUnk;
VARIANT       var;
IDispatch    *pDisp;
BSTR          bstrWebSiteName;
ULONG		lFetch;
IADs         *pADs;
TCHAR		pszErrorMes[1024] = {0} ;
BOOL		bFindWeb = FALSE;

try
{

HRESULT hr = ADsGetObject(L"IIS://localhost/w3svc",IID_IADsContainer,(void**)&iContainer);
ASSERT(iContainer);
if(FAILED(hr))
goto error;
TRACE(_T("ADsGetObject IID_IADSContainer SUCESS."));
iContainer->get__NewEnum(&pUnk);
iContainer->Release();

pUnk->QueryInterface(IID_IEnumVARIANT, (void**) &pEnum);
pUnk->Release();

// Now Enumerate
hr = pEnum->Next(1, &var, &lFetch);

while(hr == S_OK)
{
if (lFetch == 1)
{
pDisp = V_DISPATCH(&var);
if (pDisp == NULL)
{
continue;
}

hr = pDisp->QueryInterface(IID_IADs, (void**)&pADs);
//pDisp->Release();

if (FAILED(hr))
{
goto enumnext;
}

_variant_t vBindList;
hr= pADs->Get(_bstr_t("ServerBindings"), &vBindList);
if (vBindList.vt == VT_EMPTY)
{
goto enumnext;
}

TRACE(_T("Get a ServerBindings"));

SAFEARRAY* pArray = vBindList.parray;

LONG lIndex = 0;
LONG lLeftBound = 0;
LONG lRightBound = 0;

hr = SafeArrayGetLBound(pArray, 1, &lLeftBound);

hr = SafeArrayGetUBound(pArray, 1, &lRightBound);

LONG elementSize = lRightBound - lLeftBound + 1;

// Enum Port list
for (lIndex = 0; lIndex < elementSize ; lIndex++)
{
_variant_t vPort;
SafeArrayGetElement(pArray, &lIndex, &vPort);

WCHAR wszPort[MAX_PATH] = {0};
wcscpy(wszPort, vPort.bstrVal);
TRACE(_T("Port:%s"),wszPort);
WCHAR* nEnd = wcsstr(wszPort + 1, L":" );
memset(nEnd, 0, 2);
int port = _wtoi(wszPort + 1);

if (port == nPort)
{
pADs->get_Name((BSTR*)&bstrWebSiteName);
bFindWeb = TRUE;
break;
}
}

//SafeArrayDestroy(pArray);

pADs->Release();
}

if (bFindWeb)
{
break;
}

enumnext:
hr = pEnum->Next(1, &var, &lFetch);
};

pEnum->Release();

if (!bFindWeb)
{

goto error;
}

TRACE(_T("FindWeb SUCESS"));

WCHAR svrName[MAX_PATH] = {0};
wcscpy(svrName, L"IIS://localhost/w3svc/");
wcscat(svrName, bstrWebSiteName);
wcscat(svrName,L"/ROOT");
hr = ADsGetObject(_bstr_t(svrName), IID_IADs, (void**)&pADs );

_variant_t vRoot;
pADs->Get(_bstr_t("Path"), &vRoot);

if (*pbstrRoot == NULL)
{
*pbstrRoot = ::SysAllocString(vRoot.bstrVal);
}
else
{
::SysFreeString(*pbstrRoot);
::SysReAllocString(pbstrRoot, vRoot.bstrVal);
}

pADs->Release();

if(FAILED(hr))
goto error;
CoUninitialize();
return bFindWeb;

}
catch(_com_error& err)
{
GetComErr(_T("AdsiGetWebRootWithBinding"),err);
TRACE(_T("com_err:%s"), err.ErrorMessage());
}
catch(...)
{
TRACE(_T("Exception "));
GetError(_T("AdsiGetWebRootWithBinding"));
}
error:
CoUninitialize();
return bFindWeb;
}




/////////////////////////////////////////////////
//ACL Function Declare

#include "Accctrl.h"
#include "Aclapi.h."
#include "MACRO.h"

extern "C"
{
FUNCAPI BOOL _stdcall EnableDirectoryACL(LPTSTR lpDirectory);
}



#ifndef FUNCAPI
#ifdef EXPORTAPI
#define FUNCAPI __declspec(dllexport)
#else
#define FUNCAPI __declspec(dllimport)
#endif
#endif




//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by SETUPKIT.RC
//

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS

#define _APS_NEXT_RESOURCE_VALUE	5000
#define _APS_NEXT_CONTROL_VALUE		5000
#define _APS_NEXT_SYMED_VALUE		5000
#define _APS_NEXT_COMMAND_VALUE		32771
#endif
#endif




//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by SETUPKIT.RC
//

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS

#define _APS_NEXT_RESOURCE_VALUE	5000
#define _APS_NEXT_CONTROL_VALUE		5000
#define _APS_NEXT_SYMED_VALUE		5000
#define _APS_NEXT_COMMAND_VALUE		32771
#endif
#endif




// SetupKit.h : main header file for the SETUPKIT DLL
//

#if !defined(AFX_SETUPKIT_H__BB19DD21_E612_4309_933F_F7ACCE75EC34__INCLUDED_)
#define AFX_SETUPKIT_H__BB19DD21_E612_4309_933F_F7ACCE75EC34__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif

#include "resource.h"		// main symbols
#include "comdef.h"
#include "macro.h"

/////////////////////////////////////////////////////////////////////////////
// CSetupKitApp
// See SetupKit.cpp for the implementation of this class
//

class CSetupKitApp : public CWinApp
{
public:
CSetupKitApp();

// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSetupKitApp)
//}}AFX_VIRTUAL

//{{AFX_MSG(CSetupKitApp)
// NOTE - the ClassWizard will add and remove member functions here.
//    DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

void GetError(LPTSTR lpSource);
void GetComErr(LPTSTR lpSource,_com_error& err);

extern "C" FUNCAPI int _stdcall WriteText(LPTSTR lpSource,LPTSTR lpMsg);
/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_SETUPKIT_H__BB19DD21_E612_4309_933F_F7ACCE75EC34__INCLUDED_)




// stdafx.h : include file for standard system include files,
//  or project specific include files that are used frequently, but
//      are changed infrequently
//

#if !defined(AFX_STDAFX_H__48C31FEC_4E77_4811_A2EE_989ABEE567ED__INCLUDED_)
#define AFX_STDAFX_H__48C31FEC_4E77_4811_A2EE_989ABEE567ED__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define VC_EXTRALEAN		// Exclude rarely-used stuff from Windows headers

#include <afxwin.h>         // MFC core and standard components
#include <afxext.h>         // MFC extensions

#ifndef _AFX_NO_OLE_SUPPORT
#include <afxole.h>         // MFC OLE classes
#include <afxodlgs.h>       // MFC OLE dialog classes
#include <afxdisp.h>        // MFC Automation classes
#endif // _AFX_NO_OLE_SUPPORT

#ifndef _AFX_NO_DB_SUPPORT
#include <afxdb.h>			// MFC ODBC database classes
#endif // _AFX_NO_DB_SUPPORT

#ifndef _AFX_NO_DAO_SUPPORT
#include <afxdao.h>			// MFC DAO database classes
#endif // _AFX_NO_DAO_SUPPORT

#include <afxdtctl.h>		// MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>			// MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__48C31FEC_4E77_4811_A2EE_989ABEE567ED__INCLUDED_)



///////////////////////////////////////////////////////////////////
//WebSetup Function Declare

//ADSI include
#include "stdlib.h"
#include "activeds.h"   //Adsi header
#include "comutil.h"
#include "macro.h"

#define INITGUID

extern "C"
{
//ADSI Function
///////////////////////////////////////////////////////
///1-FALSE 0-TRUE
///////////////////////////////////////////////////////
FUNCAPI BOOL _stdcall AdsiCreateWeb(LPCTSTR lpVDirectoryName,LPCTSTR lpPath,LPCTSTR lpUserName,LPCTSTR lpPWD,BOOL bIsNeedUser);
FUNCAPI BOOL _stdcall AdsiCreateWebWithSiteName(LPCTSTR lpSiteName,LPCTSTR lpVDirectoryName,LPCTSTR lpPath,LPCTSTR lpUserName,LPCTSTR lpPWD,BOOL bIsNeedUser);
FUNCAPI BOOL _stdcall AdsiCreateVirtualDirection(LPCTSTR  lpszVirtualDirName,LPCTSTR   lpszDiskPath);
FUNCAPI BOOL _stdcall AdsiCreateWebServer(LPCTSTR m_sitename,LPCTSTR bindaddress,LPCTSTR domain,LPCTSTR pathname,LPCTSTR m_localidentifier);
//删除网站标识
FUNCAPI BOOL _stdcall AdsiDeleteIdentifier(LPCTSTR m_localidentifier);
//创建网站标识
FUNCAPI BOOL _stdcall AdsiCreateIdentifier(LPCTSTR m_localidentifier);
FUNCAPI BOOL _stdcall AdsiDeleteWeb(LPCTSTR lpVDirectory);
FUNCAPI BOOL _stdcall AdsiSetHttpErrorPage(LPCTSTR lpVirtualName,UINT nErrorCode,UINT nSubErrorCode,LPCTSTR lpFilePath);
FUNCAPI BOOL _stdcall AdsiCreateSubApp(LPCTSTR lpVirtualName,LPCTSTR lpVirtualSubName,LPCTSTR lpPath);
FUNCAPI BOOL _stdcall AdsiIsExist(LPCTSTR lpVirtualName);
FUNCAPI BOOL _stdcall AdsiSetSession(LPCTSTR lpVirtualName,LONG time);
FUNCAPI BOOL _stdcall AdsiDeleteWebSite(LPCTSTR lpSiteName);
FUNCAPI BOOL _stdcall AdsiCreateWebWithInstance(LPCTSTR lpVDirectoryName,LPCTSTR lpPath,LPCTSTR lpUserName,LPCTSTR lpPWD,BOOL bIsNeedUser,LPCTSTR instance);
FUNCAPI BOOL _stdcall AdsiDeleteWebWithInstance(LPCTSTR lpVDirectoryName,LPCTSTR instance);
FUNCAPI BOOL _stdcall AdsiCreateWebWithPath(LPCTSTR lpVDirectoryName,LPCTSTR lpPath,LPCTSTR instance);
FUNCAPI BOOL _stdcall AdsiStartIIS(LPCTSTR instance);
FUNCAPI BOOL _stdcall AdsiStopIIS(LPCTSTR instance);
FUNCAPI BOOL _stdcall AdsiEnableService(void);
FUNCAPI BOOL _stdcall AdsiIsExistIIS(void);
FUNCAPI BOOL _stdcall AdsiSetConnectionTimeout(LPCTSTR lpInstance,UINT time);
FUNCAPI BOOL _stdcall AdsiSetKeepAlive(LPCTSTR lpInstance,BOOL bValue);
FUNCAPI BOOL _stdcall AdsiGetWebRootWithBinding(BSTR* lpRoot, int nPort);
FUNCAPI BOOL _stdcall AdsiSetMIMEType(LPCTSTR lpVDirectoryName,LPCTSTR lpExtension,LPCTSTR lpType);
FUNCAPI BOOL _stdcall InternalSetMIMEType(IADs *iAds,LPCTSTR lpExt,LPCTSTR lpType);
///////////////////////////////////////////////////////
//0-FALSE >0-number of instance
///////////////////////////////////////////////////////
FUNCAPI UINT _stdcall AdsiCreateWebSite(LPCTSTR lpSiteName,LPCTSTR lpBind,LPCTSTR lpRoot);
FUNCAPI BOOL _stdcall InstallU8SLSVR();
FUNCAPI void _stdcall DisableAutotuning();
}



//
// SETUPKIT.RC2 - resources Microsoft Visual C++ does not edit directly
//

#ifdef APSTUDIO_INVOKED
#error this file is not editable by Microsoft Visual C++
#endif //APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////
// Add manually edited resources here...

/////////////////////////////////////////////////////////////////////////////


测试程序





// stdafx.cpp : source file that includes just the standard includes
//	TestSetupKIit.pch will be the pre-compiled header
//	stdafx.obj will contain the pre-compiled type information

#include "stdafx.h"




// stdafx.cpp : source file that includes just the standard includes
//	TestSetupKIit.pch will be the pre-compiled header
//	stdafx.obj will contain the pre-compiled type information

#include "stdafx.h"



// TestSetupKIitDlg.cpp : implementation file
//

#include "stdafx.h"
#include "TestSetupKIit.h"
#include "TestSetupKIitDlg.h"
#define DLLINTERFACE __declspec(dllimport)
#include "..\WebSetup.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA

// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestSetupKIitDlg dialog

CTestSetupKIitDlg::CTestSetupKIitDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTestSetupKIitDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTestSetupKIitDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CTestSetupKIitDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestSetupKIitDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CTestSetupKIitDlg, CDialog)
//{{AFX_MSG_MAP(CTestSetupKIitDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_setweb, Onsetweb)
ON_BN_CLICKED(IDC_CreateIdentifier, OnCreateIdentifier)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestSetupKIitDlg message handlers

BOOL CTestSetupKIitDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// Set the icon for this dialog.  The framework does this automatically
//  when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);			// Set big icon
SetIcon(m_hIcon, FALSE);		// Set small icon

// TODO: Add extra initialization here

return TRUE;  // return TRUE  unless you set the focus to a control
}

void CTestSetupKIitDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CTestSetupKIitDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CTestSetupKIitDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}

void CTestSetupKIitDlg::Onsetweb()
{
//AdsiCreateWeb(_T("STEMS"), _T("C:\\STEMS\\StemsPmms"), _T(""), _T(""), FALSE);
//AdsiCreateWebWithSiteName(_T("STEMS"),_T("STEMS"), _T("C:\\STEMS\\StemsPmms"), _T(""), _T(""), FALSE);

BOOL m_iscreatesuccess=FALSE;
//m_iscreatesuccess=AdsiCreateWebServer(_T("StemsPortal"),_T("10.1.240.108:8080"),_T("www.stems.com"),_T("C:\\STEMS\\StemsPmms"),_T("10002"));
m_iscreatesuccess=AdsiCreateWebServer(_T("u8virtualtest"),_T("10.1.42.28:9091"),_T(""),_T("C:\\WINDOWS\\system32\\u8virtualtest"),_T("1005"));
if(TRUE==m_iscreatesuccess)
{
printf("create   site   ok\n");
}
else
{
printf("create   site   failed\n");
}

/*
// TODO: Add your control notification handler code here
HINSTANCE  hIns = LoadLibrary(_T("E:\\STEMS_SETUP\\STEMS_SETUP\\InstallProject\\SetupKit\\Debug\\SetupKit.dll"));
FARPROC pFun;
if (hIns != NULL)
{
pFun = GetProcAddress(hIns, "AdsiCreateWebWithSiteName");
((AdsiCreateWebWithSiteName)(pFun))(_T("STEMS"),_T("STEMS"), _T("C:\\STEMS\\StemsPmms"), _T(""), _T(""), FALSE);
FreeLibrary(hIns);
}
*/
}

void CTestSetupKIitDlg::OnCreateIdentifier()
{
// TODO: Add your control notification handler code here
BOOL m_iscreatesuccess=FALSE;
m_iscreatesuccess=AdsiCreateIdentifier(_T("1005"));
if(TRUE==m_iscreatesuccess)
{
printf("create   Identifier   ok\n");
}
else
{
printf("create   Identifier   failed\n");
}

}



//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by TestSetupKIit.rc
//
#define IDM_ABOUTBOX                    0x0010
#define IDD_ABOUTBOX                    100
#define IDS_ABOUTBOX                    101
#define IDD_TESTSETUPKIIT_DIALOG        102
#define IDR_MAINFRAME                   128
#define IDC_setweb                      1000
#define IDC_CreateIdentifier            1001

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        129
#define _APS_NEXT_COMMAND_VALUE         32771
#define _APS_NEXT_CONTROL_VALUE         1002
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif




// stdafx.h : include file for standard system include files,
//  or project specific include files that are used frequently, but
//      are changed infrequently
//

#if !defined(AFX_STDAFX_H__E7E5E2C2_1C2D_4BD1_85AB_2C1BD3AD5A68__INCLUDED_)
#define AFX_STDAFX_H__E7E5E2C2_1C2D_4BD1_85AB_2C1BD3AD5A68__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define VC_EXTRALEAN		// Exclude rarely-used stuff from Windows headers

#include <afxwin.h>         // MFC core and standard components
#include <afxext.h>         // MFC extensions
#include <afxdisp.h>        // MFC Automation classes
#include <afxdtctl.h>		// MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>			// MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__E7E5E2C2_1C2D_4BD1_85AB_2C1BD3AD5A68__INCLUDED_)




// TestSetupKIit.h : main header file for the TESTSETUPKIIT application
//

#if !defined(AFX_TESTSETUPKIIT_H__3F99EB60_57BC_46B0_BE71_54004371FE8F__INCLUDED_)
#define AFX_TESTSETUPKIIT_H__3F99EB60_57BC_46B0_BE71_54004371FE8F__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif

#include "resource.h"		// main symbols

/////////////////////////////////////////////////////////////////////////////
// CTestSetupKIitApp:
// See TestSetupKIit.cpp for the implementation of this class
//

class CTestSetupKIitApp : public CWinApp
{
public:
CTestSetupKIitApp();

// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CTestSetupKIitApp)
public:
virtual BOOL InitInstance();
//}}AFX_VIRTUAL

// Implementation

//{{AFX_MSG(CTestSetupKIitApp)
// NOTE - the ClassWizard will add and remove member functions here.
//    DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_TESTSETUPKIIT_H__3F99EB60_57BC_46B0_BE71_54004371FE8F__INCLUDED_)




// TestSetupKIitDlg.h : header file
//

#if !defined(AFX_TESTSETUPKIITDLG_H__8862725E_2049_447E_8194_2FDAFE23E94A__INCLUDED_)
#define AFX_TESTSETUPKIITDLG_H__8862725E_2049_447E_8194_2FDAFE23E94A__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/////////////////////////////////////////////////////////////////////////////
// CTestSetupKIitDlg dialog

class CTestSetupKIitDlg : public CDialog
{
// Construction
public:
CTestSetupKIitDlg(CWnd* pParent = NULL);	// standard constructor

// Dialog Data
//{{AFX_DATA(CTestSetupKIitDlg)
enum { IDD = IDD_TESTSETUPKIIT_DIALOG };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA

// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CTestSetupKIitDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:
HICON m_hIcon;

// Generated message map functions
//{{AFX_MSG(CTestSetupKIitDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void Onsetweb();
afx_msg void OnCreateIdentifier();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_TESTSETUPKIITDLG_H__8862725E_2049_447E_8194_2FDAFE23E94A__INCLUDED_)




//
// TESTSETUPKIIT.RC2 - resources Microsoft Visual C++ does not edit directly
//

#ifdef APSTUDIO_INVOKED
#error this file is not editable by Microsoft Visual C++
#endif //APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////
// Add manually edited resources here...

/////////////////////////////////////////////////////////////////////////////


测试窗体

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: