// Deploy.cpp : implementation file // #include "precomp.hxx" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDeploy property page IMPLEMENT_DYNCREATE(CDeploy, CPropertyPage) CDeploy::CDeploy() : CPropertyPage(CDeploy::IDD) { //{{AFX_DATA_INIT(CDeploy) m_fAutoInst = FALSE; m_iDeployment = -1; m_hConsoleHandle = NULL; m_iUI = -1; //}}AFX_DATA_INIT } CDeploy::~CDeploy() { *m_ppThis = NULL; MMCFreeNotifyHandle(m_hConsoleHandle); } void CDeploy::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDeploy) DDX_Check(pDX, IDC_CHECK2, m_fAutoInst); DDX_Radio(pDX, IDC_RADIO6, m_iDeployment); DDX_Radio(pDX, IDC_RADIO3, m_iUI); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDeploy, CPropertyPage) //{{AFX_MSG_MAP(CDeploy) ON_BN_CLICKED(IDC_RADIO6, OnDisable) ON_BN_CLICKED(IDC_RADIO2, OnPublished) ON_BN_CLICKED(IDC_RADIO1, OnAssigned) ON_BN_CLICKED(IDC_CHECK2, OnAutoInstall) ON_BN_CLICKED(IDC_RADIO3, OnBasic) ON_BN_CLICKED(IDC_RADIO4, OnMax) ON_BN_CLICKED(IDC_RADIO5, OnDefault) ON_BN_CLICKED(IDC_BUTTON1, OnAdvanced) ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDeploy message handlers BOOL CDeploy::OnApply() { DWORD dwActFlags = m_pData->pDetails->pInstallInfo->dwActFlags; dwActFlags &= ~(ACTFLG_Assigned | ACTFLG_Published | ACTFLG_OnDemandInstall | ACTFLG_UserInstall); switch (m_iDeployment) { case 0: // Disabled dwActFlags |= ACTFLG_Published; break; case 1: // Published dwActFlags |= ACTFLG_Published | ACTFLG_UserInstall; if (m_fAutoInst) { dwActFlags |= ACTFLG_OnDemandInstall; } break; case 2: // Assigned dwActFlags |= (ACTFLG_Assigned | ACTFLG_OnDemandInstall); break; default: break; } HRESULT hr = m_pIClassAdmin->ChangePackageProperties(m_pData->pDetails->pszPackageName, NULL, &dwActFlags, NULL, NULL, NULL); if (SUCCEEDED(hr)) { m_pData->pDetails->pInstallInfo->dwActFlags = dwActFlags; #if UGLY_SUBDIRECTORY_HACK { CString sz = m_szGPTRoot; sz += L"\\"; sz += m_pData->pDetails->pInstallInfo->pszScriptPath; // copy to subdirectories CString szRoot; CString szFile; int i = sz.ReverseFind(L'\\'); szRoot = sz.Left(i); szFile = sz.Mid(i+1); CString szTemp; if (0 != (m_pData->pDetails->pInstallInfo->dwActFlags & ACTFLG_Assigned)) { for (i = m_pData->pDetails->pPlatformInfo->cPlatforms; i--;) { if (PROCESSOR_ARCHITECTURE_INTEL == m_pData->pDetails->pPlatformInfo->prgPlatform[i].dwProcessorArch) { szTemp = szRoot; szTemp += L"\\assigned\\x86\\"; szTemp += szFile; CopyFile(sz, szTemp, FALSE); } if (PROCESSOR_ARCHITECTURE_ALPHA == m_pData->pDetails->pPlatformInfo->prgPlatform[i].dwProcessorArch) { szTemp = szRoot; szTemp += L"\\assigned\\alpha\\"; szTemp += szFile; CopyFile(sz, szTemp, FALSE); } } } else { szTemp = szRoot; szTemp += L"\\assigned\\x86\\"; szTemp += szFile; DeleteFile(szTemp); szTemp = szRoot; szTemp += L"\\assigned\\alpha\\"; szTemp += szFile; DeleteFile(szTemp); } } #endif MMCPropertyChangeNotify(m_hConsoleHandle, (long) m_cookie); } return CPropertyPage::OnApply(); } BOOL CDeploy::OnInitDialog() { RefreshData(); CPropertyPage::OnInitDialog(); // unmarshal the IClassAdmin interface HRESULT hr = CoGetInterfaceAndReleaseStream(m_pIStream, IID_IClassAdmin, (void **) &m_pIClassAdmin); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CDeploy::OnDisable() { SetModified(); m_fAutoInst = FALSE; GetDlgItem(IDC_CHECK2)->EnableWindow(FALSE); } void CDeploy::OnPublished() { SetModified(); GetDlgItem(IDC_CHECK2)->EnableWindow(TRUE); } void CDeploy::OnAssigned() { SetModified(); m_fAutoInst = TRUE; GetDlgItem(IDC_CHECK2)->EnableWindow(FALSE); } void CDeploy::OnAutoInstall() { SetModified(); } void CDeploy::OnBasic() { SetModified(); } void CDeploy::OnMax() { SetModified(); } void CDeploy::OnDefault() { SetModified(); } void CDeploy::OnAdvanced() { // TODO: Add your control notification handler code here } LRESULT CDeploy::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_USER_REFRESH: RefreshData(); UpdateData(FALSE); return 0; case WM_USER_CLOSE: return GetOwner()->SendMessage(WM_CLOSE); default: return CPropertyPage::WindowProc(message, wParam, lParam); } } void CDeploy::RefreshData(void) { DWORD dwActFlags = m_pData->pDetails->pInstallInfo->dwActFlags; m_fAutoInst = (0 != (dwActFlags & ACTFLG_OnDemandInstall)); if (dwActFlags & ACTFLG_Assigned) { m_iDeployment = 2; GetDlgItem(IDC_CHECK2)->EnableWindow(FALSE); } else if (dwActFlags & (ACTFLG_OnDemandInstall | ACTFLG_UserInstall)) { m_iDeployment = 1; GetDlgItem(IDC_CHECK2)->EnableWindow(TRUE); } else { m_iDeployment = 0; GetDlgItem(IDC_CHECK2)->EnableWindow(FALSE); } SetModified(FALSE); }