You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
4.5 KiB
180 lines
4.5 KiB
//#ifndef WIN32_LEAN_AND_MEAN
|
|
//#define WIN32_LEAN_AND_MEAN
|
|
//#endif
|
|
|
|
#ifndef _WIN32_WINNT
|
|
#define _WIN32_WINNT 0x0500
|
|
#endif
|
|
|
|
#include <windows.h>
|
|
#include <tchar.h>
|
|
|
|
#include <msi.h>
|
|
#include <assert.h>
|
|
#include <time.h>
|
|
#include <msi.h>
|
|
#include <msiquery.h>
|
|
|
|
#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;
|
|
}
|