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

xiaoxiao2021-02-28  30

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... / 测试窗体

转载请注明原文地址: https://www.6miu.com/read-2150007.html

最新回复(0)