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