//#ifndef WIN32_LEAN_AND_MEAN //#define WIN32_LEAN_AND_MEAN //#endif #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0500 #endif #include #include #include #include #include #include #include #include "webcaum.h" #include "..\..\shared\common.h" #include "..\..\shared\propertybag.h" #include "..\..\shared\apppool.h" HINSTANCE g_hinst; //-------------------------------------------------------------------------- BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: { g_hinst = (HINSTANCE)hModule; break; } case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } //-------------------------------------------------------------------------- // // This function is exported // UINT _stdcall Install(MSIHANDLE hInstall) { //::MessageBox( NULL, TEXT( "attach debugger" ), TEXT( "uddi" ), MB_OK ); ENTER(); TCHAR szCustomActionData[ 256 ]; DWORD dwLen = sizeof( szCustomActionData ) / sizeof( szCustomActionData[0] ); UINT iRet = MsiGetProperty( hInstall, TEXT( "CustomActionData" ), szCustomActionData, &dwLen); if( ERROR_SUCCESS != iRet ) { LogError( TEXT( "Error getting custom action data in Web installer" ), iRet ); return iRet; } //::MessageBox( NULL, TEXT( "got CustomActionaData" ), TEXT( "uddi" ), MB_OK ); // // get rid of any lefover entries first... // RemoveIISUDDIMetabase(); //::MessageBox( NULL, TEXT( "removed metabase" ), TEXT( "uddi" ), MB_OK ); // // put our entries into the IIS metabase // TCHAR szUserName[CA_VALUE_LEN+1]; TCHAR szPwd[CA_VALUE_LEN+1]; TCHAR szTmpBuf[ 1024 ]; TCHAR szTmpProperty[ 256 ]; TCHAR szLogPath[ MAX_PATH + 1 ] = {0}; ATOM at = 0; int poolidtype = 0; memset (szUserName, 0, sizeof szUserName); memset (szPwd, 0, sizeof szPwd); memset (szTmpProperty, 0, sizeof szTmpProperty ); CPropertyBag pb; if( !pb.Parse( szCustomActionData, sizeof( szCustomActionData ) / sizeof( TCHAR ) ) ) { return ERROR_INSTALL_FAILURE; } //::MessageBox( NULL, TEXT( "parsed properties" ), TEXT( "uddi" ), MB_OK ); poolidtype = pb.GetValue( TEXT( "APPPOOL_IDENTITY_TYPE" ) ); _tcsncpy( szUserName, pb.GetString( TEXT( "WAM_USER_NAME" ), szTmpBuf ), CA_VALUE_LEN ); _tcsncpy( szTmpProperty, pb.GetString( TEXT( "C9E18" ), szTmpProperty ), CA_VALUE_LEN ); _tcsncpy( szLogPath, pb.GetString( TEXT( "LOGDIR" ), szLogPath ), MAX_PATH ); //::MessageBox( NULL, szTmpProperty, TEXT( "C9E18" ), MB_OK ); if ( _tcslen( szTmpProperty ) ) { at = (ATOM)_ttoi( szTmpProperty ); GlobalGetAtomName( at, szPwd, CA_VALUE_LEN ); } //::MessageBox( NULL, szPwd, TEXT( "C9E18 Atom value" ), MB_OK ); iRet = SetupIISUDDIMetabase( poolidtype, szUserName, szPwd ); //::MessageBox( NULL, TEXT( "metabase set up ok" ), TEXT( "uddi" ), MB_OK ); //iRet = SetupIISUDDIMetabase( 3, TEXT( "A-MARKPA11\\Guest" ), TEXT( "" ) ); if( ERROR_SUCCESS != iRet ) { return iRet; } // // stop and start the app pool // CUDDIAppPool apppool; apppool.Recycle(); //::MessageBox( NULL, TEXT( "app pool recycled" ), TEXT( "uddi" ), MB_OK ); // // set permissions on the UDDI folders // if ( !SetUDDIFolderDacls( szUserName ) ) { return ERROR_INSTALL_FAILURE; } // // now set permissions on the log folders // if ( _tcslen( szLogPath ) ) { if ( !SetFolderAclRecurse( szLogPath, szUserName, GENERIC_READ | GENERIC_WRITE | DELETE ) ) return ERROR_INSTALL_FAILURE; } // // Set permissions on the Windows TEMP folder; we need access to this directory because our code // does CLR serialization. if( !SetWindowsTempDacls( szUserName ) ) { return ERROR_INSTALL_FAILURE; } //::MessageBox( NULL, TEXT( "finishing this part..." ), TEXT( "uddi" ), MB_OK ); Log (_T("About to leave Install with retcode %d"), iRet); return iRet; } //-------------------------------------------------------------------------- // // This function is exported // UINT _stdcall Uninstall(MSIHANDLE hInstall) { ENTER(); //::MessageBox( NULL, TEXT( "attach debugger" ), TEXT( "uddi" ), MB_OK ); RemoveIISUDDIMetabase(); // // delete the app pool // CUDDIAppPool apppool; apppool.Delete(); return ERROR_SUCCESS; }