windows-nt/Source/XPSP1/NT/com/ole32/cs/admin/ui/deploy.cpp
2020-09-26 16:20:57 +08:00

242 lines
6.4 KiB
C++

// 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);
}