fixing bug 64105 - Remove blue background screen during installation

bug 60149 - Missing folder name in uninstall error
bug 64007 - Mozilla/Netscape strings hardcoded
bug 60039 - Uninstaller doesn't remove N6 cck entry in add/remove programs

This affects only windows platforms.  sr=sspitzer r=dveditz,dbragg
This commit is contained in:
ssu%netscape.com 2001-01-03 07:15:47 +00:00
Родитель f4353c7481
Коммит 9ae89e8774
11 изменённых файлов: 562 добавлений и 475 удалений

Просмотреть файл

@ -55,6 +55,16 @@ void AskCancelDlg(HWND hDlg)
}
}
void DisableSystemMenuItems(HWND hWnd, BOOL bDisableClose)
{
EnableMenuItem(GetSystemMenu(hWnd, FALSE), SC_RESTORE, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(GetSystemMenu(hWnd, FALSE), SC_SIZE, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(GetSystemMenu(hWnd, FALSE), SC_MAXIMIZE, MF_BYCOMMAND | MF_GRAYED);
if(bDisableClose)
EnableMenuItem(GetSystemMenu(hWnd, FALSE), SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);
}
void PaintGradientShade(HWND hWnd, HDC hdc)
{
RECT rectClient; // Rectangle for entire client area
@ -154,6 +164,7 @@ LRESULT CALLBACK DlgProcWelcome(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam)
switch(msg)
{
case WM_INITDIALOG:
DisableSystemMenuItems(hDlg, FALSE);
SetWindowText(hDlg, diWelcome.szTitle);
wsprintf(szBuf, diWelcome.szMessage0, sgProduct.szProductName);
@ -163,6 +174,7 @@ LRESULT CALLBACK DlgProcWelcome(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam)
if(GetClientRect(hDlg, &rDlg))
SetWindowPos(hDlg, HWND_TOP, (dwScreenX/2)-(rDlg.right/2), (dwScreenY/2)-(rDlg.bottom/2), 0, 0, SWP_NOSIZE);
break;
case WM_COMMAND:
@ -170,12 +182,7 @@ LRESULT CALLBACK DlgProcWelcome(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam)
{
case IDWIZNEXT:
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
break;
case IDWIZBACK:
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
DlgSequenceNext();
break;
case IDCANCEL:
@ -204,6 +211,7 @@ LRESULT CALLBACK DlgProcLicense(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam)
switch(msg)
{
case WM_INITDIALOG:
DisableSystemMenuItems(hDlg, FALSE);
SetWindowText(hDlg, diLicense.szTitle);
SetDlgItemText(hDlg, IDC_MESSAGE0, diLicense.szMessage0);
SetDlgItemText(hDlg, IDC_MESSAGE1, diLicense.szMessage1);
@ -239,12 +247,12 @@ LRESULT CALLBACK DlgProcLicense(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam)
{
case IDWIZNEXT:
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
DlgSequenceNext();
break;
case IDWIZBACK:
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
DlgSequencePrev();
break;
case IDCANCEL:
@ -602,6 +610,7 @@ LRESULT CALLBACK DlgProcSetupType(HWND hDlg, UINT msg, WPARAM wParam, LONG lPara
switch(msg)
{
case WM_INITDIALOG:
DisableSystemMenuItems(hDlg, FALSE);
SetWindowText(hDlg, diSetupType.szTitle);
hDestinationPath = GetDlgItem(hDlg, IDC_EDIT_DESTINATION); /* handle to the static destination path text window */
@ -853,14 +862,14 @@ LRESULT CALLBACK DlgProcSetupType(HWND hDlg, UINT msg, WPARAM wParam, LONG lPara
CheckWizardStateCustom(DLG_ADVANCED_SETTINGS);
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
DlgSequenceNext();
break;
case IDWIZBACK:
dwTempSetupType = dwSetupType;
lstrcpy(szTempSetupPath, sgProduct.szPath);
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
DlgSequencePrev();
break;
case IDCANCEL:
@ -1091,6 +1100,7 @@ LRESULT CALLBACK DlgProcSelectComponents(HWND hDlg, UINT msg, WPARAM wParam, LON
switch(msg)
{
case WM_INITDIALOG:
DisableSystemMenuItems(hDlg, FALSE);
SetWindowText(hDlg, diSelectComponents.szTitle);
SetDlgItemText(hDlg, IDC_MESSAGE0, diSelectComponents.szMessage0);
@ -1275,12 +1285,12 @@ LRESULT CALLBACK DlgProcSelectComponents(HWND hDlg, UINT msg, WPARAM wParam, LON
case IDWIZNEXT:
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
DlgSequenceNext();
break;
case IDWIZBACK:
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
DlgSequencePrev();
break;
case IDCANCEL:
@ -1316,6 +1326,7 @@ LRESULT CALLBACK DlgProcSelectAdditionalComponents(HWND hDlg, UINT msg, WPARAM w
switch(msg)
{
case WM_INITDIALOG:
DisableSystemMenuItems(hDlg, FALSE);
SetWindowText(hDlg, diSelectAdditionalComponents.szTitle);
SetDlgItemText(hDlg, IDC_MESSAGE0, diSelectAdditionalComponents.szMessage0);
@ -1445,12 +1456,12 @@ LRESULT CALLBACK DlgProcSelectAdditionalComponents(HWND hDlg, UINT msg, WPARAM w
case IDWIZNEXT:
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
DlgSequenceNext();
break;
case IDWIZBACK:
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
DlgSequencePrev();
break;
case IDCANCEL:
@ -1482,6 +1493,7 @@ LRESULT CALLBACK DlgProcWindowsIntegration(HWND hDlg, UINT msg, WPARAM wParam, L
switch(msg)
{
case WM_INITDIALOG:
DisableSystemMenuItems(hDlg, FALSE);
SetWindowText(hDlg, diWindowsIntegration.szTitle);
SetDlgItemText(hDlg, IDC_MESSAGE0, diWindowsIntegration.szMessage0);
SetDlgItemText(hDlg, IDC_MESSAGE1, diWindowsIntegration.szMessage1);
@ -1568,7 +1580,7 @@ LRESULT CALLBACK DlgProcWindowsIntegration(HWND hDlg, UINT msg, WPARAM wParam, L
}
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
DlgSequenceNext();
break;
case IDWIZBACK:
@ -1576,7 +1588,7 @@ LRESULT CALLBACK DlgProcWindowsIntegration(HWND hDlg, UINT msg, WPARAM wParam, L
CheckWizardStateCustom(DLG_SETUP_TYPE);
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
DlgSequencePrev();
break;
case IDCANCEL:
@ -1602,6 +1614,7 @@ LRESULT CALLBACK DlgProcProgramFolder(HWND hDlg, UINT msg, WPARAM wParam, LONG l
switch(msg)
{
case WM_INITDIALOG:
DisableSystemMenuItems(hDlg, FALSE);
SetWindowText(hDlg, diProgramFolder.szTitle);
SetDlgItemText(hDlg, IDC_MESSAGE0, diProgramFolder.szMessage0);
SetDlgItemText(hDlg, IDC_EDIT_PROGRAM_FOLDER, sgProduct.szProgramFolderName);
@ -1645,12 +1658,12 @@ LRESULT CALLBACK DlgProcProgramFolder(HWND hDlg, UINT msg, WPARAM wParam, LONG l
dwWizardState = DLG_ADVANCED_SETTINGS;
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
DlgSequenceNext();
break;
case IDWIZBACK:
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
DlgSequencePrev();
break;
case IDC_LIST:
@ -1680,6 +1693,7 @@ LRESULT CALLBACK DlgProcAdvancedSettings(HWND hDlg, UINT msg, WPARAM wParam, LON
switch(msg)
{
case WM_INITDIALOG:
DisableSystemMenuItems(hDlg, FALSE);
SetWindowText(hDlg, diAdvancedSettings.szTitle);
SetDlgItemText(hDlg, IDC_MESSAGE0, diAdvancedSettings.szMessage0);
SetDlgItemText(hDlg, IDC_EDIT_PROXY_SERVER, diAdvancedSettings.szProxyServer);
@ -1701,13 +1715,13 @@ LRESULT CALLBACK DlgProcAdvancedSettings(HWND hDlg, UINT msg, WPARAM wParam, LON
GetDlgItemText(hDlg, IDC_EDIT_PROXY_PORT, diAdvancedSettings.szProxyPort, MAX_BUF);
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
DlgSequenceNext();
break;
case IDWIZBACK:
case IDCANCEL:
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
DlgSequencePrev();
break;
default:
@ -1747,6 +1761,7 @@ LRESULT CALLBACK DlgProcDownloadOptions(HWND hDlg, UINT msg, WPARAM wParam, LONG
switch(msg)
{
case WM_INITDIALOG:
DisableSystemMenuItems(hDlg, FALSE);
SetWindowText(hDlg, diDownloadOptions.szTitle);
SetDlgItemText(hDlg, IDC_MESSAGE0, diDownloadOptions.szMessage0);
SetDlgItemText(hDlg, IDC_MESSAGE1, diDownloadOptions.szMessage1);
@ -1792,20 +1807,20 @@ LRESULT CALLBACK DlgProcDownloadOptions(HWND hDlg, UINT msg, WPARAM wParam, LONG
case IDWIZNEXT:
SaveDownloadOptions(hDlg, hwndCBSiteSelector);
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
DlgSequenceNext();
break;
case IDWIZBACK:
SaveDownloadOptions(hDlg, hwndCBSiteSelector);
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
DlgSequencePrev();
break;
case IDC_BUTTON_ADDITIONAL_SETTINGS:
SaveDownloadOptions(hDlg, hwndCBSiteSelector);
dwWizardState = DLG_PROGRAM_FOLDER;
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
DlgSequenceNext();
break;
case IDCANCEL:
@ -2065,6 +2080,7 @@ LRESULT CALLBACK DlgProcStartInstall(HWND hDlg, UINT msg, WPARAM wParam, LONG lP
switch(msg)
{
case WM_INITDIALOG:
DisableSystemMenuItems(hDlg, FALSE);
SetWindowText(hDlg, diStartInstall.szTitle);
if(GetClientRect(hDlg, &rDlg))
@ -2093,19 +2109,19 @@ LRESULT CALLBACK DlgProcStartInstall(HWND hDlg, UINT msg, WPARAM wParam, LONG lP
{
case IDWIZNEXT:
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
DlgSequenceNext();
break;
case IDWIZBACK:
dwWizardState = DLG_ADVANCED_SETTINGS;
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
DlgSequencePrev();
break;
case IDC_BUTTON_SITE_SELECTOR:
dwWizardState = DLG_PROGRAM_FOLDER;
DestroyWindow(hDlg);
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
DlgSequenceNext();
break;
case IDCANCEL:
@ -2132,6 +2148,7 @@ LRESULT CALLBACK DlgProcReboot(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam)
switch(msg)
{
case WM_INITDIALOG:
DisableSystemMenuItems(hDlg, FALSE);
CheckDlgButton(hDlg, IDC_RADIO_YES, BST_CHECKED);
SetFocus(hRadioYes);
@ -2193,10 +2210,28 @@ LRESULT CALLBACK DlgProcMessage(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam)
LOGFONT logFont;
HFONT hfontTmp;
HFONT hfontOld;
char szBuf[MAX_BUF];
char szBuf2[MAX_BUF];
ZeroMemory(szBuf, sizeof(szBuf));
ZeroMemory(szBuf2, sizeof(szBuf2));
switch(msg)
{
case WM_INITDIALOG:
DisableSystemMenuItems(hDlg, TRUE);
if(NS_LoadString(hSetupRscInst, IDS_STR_MESSAGEBOX_TITLE, szBuf2, sizeof(szBuf2)) == WIZ_OK)
{
if((sgProduct.szProductName != NULL) && (*sgProduct.szProductName != '\0'))
wsprintf(szBuf, szBuf2, sgProduct.szProductName);
else
wsprintf(szBuf, szBuf2, "");
}
else if((sgProduct.szProductName != NULL) && (*sgProduct.szProductName != '\0'))
lstrcpy(szBuf, sgProduct.szProductName);
SetWindowText(hDlg, szBuf);
break;
case WM_COMMAND:
@ -2220,8 +2255,8 @@ LRESULT CALLBACK DlgProcMessage(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam)
ReleaseDC(hSTMessage, hdcSTMessage);
SetWindowPos(hDlg, HWND_TOP,
(dwScreenX/2)-((sizeString.cx + 40)/2), (dwScreenY/2)-((sizeString.cy + 40)/2),
sizeString.cx + 40, sizeString.cy + 40,
(dwScreenX/2)-((sizeString.cx + 55)/2), (dwScreenY/2)-((sizeString.cy + 50)/2),
sizeString.cx + 55, sizeString.cy + 50,
SWP_SHOWWINDOW);
if(GetClientRect(hDlg, &rDlg))
@ -2309,231 +2344,256 @@ void DlgSequenceNext()
HRESULT hrValue;
HRESULT hrErr;
char szBuf[MAX_PATH];
BOOL bDone = FALSE;
switch(dwWizardState)
do
{
case DLG_NONE:
dwWizardState = DLG_WELCOME;
gbProcessingXpnstallFiles = FALSE;
if(diWelcome.bShowDialog)
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diWelcome.szTitle, DlgProcWelcome);
else
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
break;
switch(dwWizardState)
{
case DLG_NONE:
dwWizardState = DLG_WELCOME;
gbProcessingXpnstallFiles = FALSE;
if(diWelcome.bShowDialog)
{
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diWelcome.szTitle, DlgProcWelcome);
bDone = TRUE;
}
break;
case DLG_WELCOME:
dwWizardState = DLG_LICENSE;
gbProcessingXpnstallFiles = FALSE;
if(diLicense.bShowDialog)
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diLicense.szTitle, DlgProcLicense);
else
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
case DLG_WELCOME:
dwWizardState = DLG_LICENSE;
gbProcessingXpnstallFiles = FALSE;
if(diLicense.bShowDialog)
{
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diLicense.szTitle, DlgProcLicense);
bDone = TRUE;
}
break;
break;
case DLG_LICENSE:
dwWizardState = DLG_SETUP_TYPE;
gbProcessingXpnstallFiles = FALSE;
if(diSetupType.bShowDialog)
{
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diSetupType.szTitle, DlgProcSetupType);
bDone = TRUE;
}
else
{
CheckWizardStateCustom(DLG_ADVANCED_SETTINGS);
}
break;
case DLG_LICENSE:
dwWizardState = DLG_SETUP_TYPE;
gbProcessingXpnstallFiles = FALSE;
if(diSetupType.bShowDialog)
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diSetupType.szTitle, DlgProcSetupType);
else
{
CheckWizardStateCustom(DLG_ADVANCED_SETTINGS);
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
}
break;
case DLG_SETUP_TYPE:
dwWizardState = DLG_SELECT_COMPONENTS;
gbProcessingXpnstallFiles = FALSE;
if(diSelectComponents.bShowDialog)
{
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diSelectComponents.szTitle, DlgProcSelectComponents);
bDone = TRUE;
}
break;
case DLG_SETUP_TYPE:
dwWizardState = DLG_SELECT_COMPONENTS;
gbProcessingXpnstallFiles = FALSE;
if(diSelectComponents.bShowDialog)
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diSelectComponents.szTitle, DlgProcSelectComponents);
else
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
break;
case DLG_SELECT_COMPONENTS:
dwWizardState = DLG_SELECT_ADDITIONAL_COMPONENTS;
gbProcessingXpnstallFiles = FALSE;
if((diSelectAdditionalComponents.bShowDialog) && (GetAdditionalComponentsCount() > 0))
{
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diSelectAdditionalComponents.szTitle, DlgProcSelectAdditionalComponents);
bDone = TRUE;
}
break;
case DLG_SELECT_COMPONENTS:
dwWizardState = DLG_SELECT_ADDITIONAL_COMPONENTS;
gbProcessingXpnstallFiles = FALSE;
if((diSelectAdditionalComponents.bShowDialog) && (GetAdditionalComponentsCount() > 0))
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diSelectAdditionalComponents.szTitle, DlgProcSelectAdditionalComponents);
else
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
break;
case DLG_SELECT_ADDITIONAL_COMPONENTS:
dwWizardState = DLG_WINDOWS_INTEGRATION;
gbProcessingXpnstallFiles = FALSE;
if(diWindowsIntegration.bShowDialog)
{
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diWindowsIntegration.szTitle, DlgProcWindowsIntegration);
bDone = TRUE;
}
break;
case DLG_SELECT_ADDITIONAL_COMPONENTS:
dwWizardState = DLG_WINDOWS_INTEGRATION;
gbProcessingXpnstallFiles = FALSE;
if(diWindowsIntegration.bShowDialog)
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diWindowsIntegration.szTitle, DlgProcWindowsIntegration);
else
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
break;
case DLG_WINDOWS_INTEGRATION:
dwWizardState = DLG_PROGRAM_FOLDER;
gbProcessingXpnstallFiles = FALSE;
if(diProgramFolder.bShowDialog)
{
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diProgramFolder.szTitle, DlgProcProgramFolder);
bDone = TRUE;
}
else
{
dwWizardState = DLG_ADVANCED_SETTINGS;
}
break;
case DLG_WINDOWS_INTEGRATION:
dwWizardState = DLG_PROGRAM_FOLDER;
gbProcessingXpnstallFiles = FALSE;
if(diProgramFolder.bShowDialog)
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diProgramFolder.szTitle, DlgProcProgramFolder);
else
{
case DLG_PROGRAM_FOLDER:
dwWizardState = DLG_ADVANCED_SETTINGS;
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
}
break;
gbProcessingXpnstallFiles = FALSE;
if(diAdvancedSettings.bShowDialog)
{
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diAdvancedSettings.szTitle, DlgProcAdvancedSettings);
bDone = TRUE;
}
else
{
dwWizardState = DLG_ADVANCED_SETTINGS;
}
break;
case DLG_PROGRAM_FOLDER:
dwWizardState = DLG_ADVANCED_SETTINGS;
gbProcessingXpnstallFiles = FALSE;
if(diAdvancedSettings.bShowDialog)
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diAdvancedSettings.szTitle, DlgProcAdvancedSettings);
else
{
dwWizardState = DLG_ADVANCED_SETTINGS;
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
}
break;
case DLG_ADVANCED_SETTINGS:
dwWizardState = DLG_DOWNLOAD_OPTIONS;
gbProcessingXpnstallFiles = FALSE;
case DLG_ADVANCED_SETTINGS:
dwWizardState = DLG_DOWNLOAD_OPTIONS;
gbProcessingXpnstallFiles = FALSE;
do
{
hrValue = VerifyDiskSpace();
if(hrValue == IDOK)
{
/* show previous visible window */
dwWizardState = DLG_SELECT_COMPONENTS;
DlgSequencePrev();
bDone = TRUE;
break;
}
else if(hrValue == IDCANCEL)
{
AskCancelDlg(hWndMain);
hrValue = IDRETRY;
}
}while(hrValue == IDRETRY);
do
{
hrValue = VerifyDiskSpace();
if(hrValue == IDOK)
{
/* show previous visible window */
dwWizardState = DLG_SELECT_COMPONENTS;
DlgSequencePrev();
/* break out of this case because we need to show the previous dialog */
bDone = TRUE;
break;
}
else if(hrValue == IDCANCEL)
if((diDownloadOptions.bShowDialog == TRUE) && (GetTotalArchivesToDownload() > 0))
{
AskCancelDlg(hWndMain);
hrValue = IDRETRY;
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diDownloadOptions.szTitle, DlgProcDownloadOptions);
bDone = TRUE;
}
}while(hrValue == IDRETRY);
if(hrValue == IDOK)
{
/* break out of this case because we need to show the previous dialog */
break;
}
if((diDownloadOptions.bShowDialog == TRUE) && (GetTotalArchivesToDownload() > 0))
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diDownloadOptions.szTitle, DlgProcDownloadOptions);
else
{
dwWizardState = DLG_DOWNLOAD_OPTIONS;
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
}
break;
case DLG_DOWNLOAD_OPTIONS:
dwWizardState = DLG_START_INSTALL;
gbProcessingXpnstallFiles = FALSE;
if(diStartInstall.bShowDialog)
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diStartInstall.szTitle, DlgProcStartInstall);
else
PostMessage(hWndMain, WM_COMMAND, IDWIZNEXT, 0);
break;
default:
dwWizardState = DLG_START_INSTALL;
gbProcessingXpnstallFiles = TRUE;
/* PRE_DOWNLOAD process file manipulation functions */
ProcessFileOps(T_PRE_DOWNLOAD);
if(RetrieveArchives() == WIZ_OK)
{
char szInstallLogFile[MAX_BUF];
/* POST_DOWNLOAD process file manipulation functions */
ProcessFileOps(T_POST_DOWNLOAD);
/* PRE_XPCOM process file manipulation functions */
ProcessFileOps(T_PRE_XPCOM);
ProcessXpcomFile();
/* POST_XPCOM process file manipulation functions */
ProcessFileOps(T_POST_XPCOM);
/* PRE_SMARTUPDATE process file manipulation functions */
ProcessFileOps(T_PRE_SMARTUPDATE);
if(CheckInstances())
else
{
dwWizardState = DLG_DOWNLOAD_OPTIONS;
}
break;
case DLG_DOWNLOAD_OPTIONS:
dwWizardState = DLG_START_INSTALL;
gbProcessingXpnstallFiles = FALSE;
if(diStartInstall.bShowDialog)
{
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diStartInstall.szTitle, DlgProcStartInstall);
bDone = TRUE;
}
break;
default:
dwWizardState = DLG_START_INSTALL;
gbProcessingXpnstallFiles = TRUE;
/* PRE_DOWNLOAD process file manipulation functions */
ProcessFileOps(T_PRE_DOWNLOAD);
if(RetrieveArchives() == WIZ_OK)
{
char szInstallLogFile[MAX_BUF];
/* POST_DOWNLOAD process file manipulation functions */
ProcessFileOps(T_POST_DOWNLOAD);
/* PRE_XPCOM process file manipulation functions */
ProcessFileOps(T_PRE_XPCOM);
ProcessXpcomFile();
/* POST_XPCOM process file manipulation functions */
ProcessFileOps(T_POST_XPCOM);
/* PRE_SMARTUPDATE process file manipulation functions */
ProcessFileOps(T_PRE_SMARTUPDATE);
if(CheckInstances())
{
/* save the installer files in the local machine */
if(diDownloadOptions.bSaveInstaller)
SaveInstallerFiles();
CleanupXpcomFile();
PostQuitMessage(0);
/* break out of switch statment */
bDone = TRUE;
break;
}
lstrcpy(szBuf, sgProduct.szPath);
if(*sgProduct.szSubPath != '\0')
{
AppendBackSlash(szBuf, sizeof(szBuf));
lstrcat(szBuf, sgProduct.szSubPath);
}
AppendBackSlash(szBuf, sizeof(szBuf));
if(gdwUpgradeValue == UG_DELETE)
{
char szMessage[MAX_BUF];
NS_LoadString(hSetupRscInst, IDS_STR_DELETING_DESTINATION_DIR, szMessage, sizeof(szMessage));
ShowMessage(szMessage, TRUE);
DirectoryRemove(szBuf, TRUE);
CreateDirectoriesAll(szBuf, TRUE);
ShowMessage(szMessage, FALSE);
}
/* copy the install_wizard.log file from the temp\ns_temp dir to
* the destination dir and use the new destination file to continue
* logging.
*/
lstrcpy(szInstallLogFile, szTempDir);
AppendBackSlash(szInstallLogFile, sizeof(szInstallLogFile));
lstrcat(szInstallLogFile, FILE_INSTALL_LOG);
FileCopy(szInstallLogFile, szBuf, FALSE);
DeleteFile(szInstallLogFile);
gbILUseTemp = FALSE;
lstrcat(szBuf, "Uninstall\\");
CreateDirectoriesAll(szBuf, TRUE);
/* save the installer files in the local machine */
if(diDownloadOptions.bSaveInstaller)
SaveInstallerFiles();
CleanupXpcomFile();
PostQuitMessage(0);
/* break out of switch statment */
break;
}
lstrcpy(szBuf, sgProduct.szPath);
if(*sgProduct.szSubPath != '\0')
{
AppendBackSlash(szBuf, sizeof(szBuf));
lstrcat(szBuf, sgProduct.szSubPath);
}
AppendBackSlash(szBuf, sizeof(szBuf));
if(gdwUpgradeValue == UG_DELETE)
{
char szMessage[MAX_BUF];
NS_LoadString(hSetupRscInst, IDS_STR_DELETING_DESTINATION_DIR, szMessage, sizeof(szMessage));
ShowMessage(szMessage, TRUE);
DirectoryRemove(szBuf, TRUE);
CreateDirectoriesAll(szBuf, TRUE);
ShowMessage(szMessage, FALSE);
}
/* copy the install_wizard.log file from the temp\ns_temp dir to
* the destination dir and use the new destination file to continue
* logging.
*/
lstrcpy(szInstallLogFile, szTempDir);
AppendBackSlash(szInstallLogFile, sizeof(szInstallLogFile));
lstrcat(szInstallLogFile, FILE_INSTALL_LOG);
FileCopy(szInstallLogFile, szBuf, FALSE);
DeleteFile(szInstallLogFile);
gbILUseTemp = FALSE;
lstrcat(szBuf, "Uninstall\\");
CreateDirectoriesAll(szBuf, TRUE);
/* save the installer files in the local machine */
if(diDownloadOptions.bSaveInstaller)
SaveInstallerFiles();
hrErr = SmartUpdateJars();
if((hrErr == WIZ_OK) || (hrErr == 999))
{
UpdateJSProxyInfo();
/* POST_SMARTUPDATE process file manipulation functions */
ProcessFileOps(T_POST_SMARTUPDATE);
/* PRE_LAUNCHAPP process file manipulation functions */
ProcessFileOps(T_PRE_LAUNCHAPP);
LaunchApps();
/* POST_LAUNCHAPP process file manipulation functions */
ProcessFileOps(T_POST_LAUNCHAPP);
/* DEPEND_REBOOT process file manipulation functions */
ProcessFileOps(T_DEPEND_REBOOT);
ProcessProgramFolderShowCmd();
if(NeedReboot())
hrErr = SmartUpdateJars();
if((hrErr == WIZ_OK) || (hrErr == 999))
{
CleanupXpcomFile();
hDlgCurrent = InstantiateDialog(hWndMain, DLG_RESTART, diReboot.szTitle, DlgProcReboot);
UpdateJSProxyInfo();
/* POST_SMARTUPDATE process file manipulation functions */
ProcessFileOps(T_POST_SMARTUPDATE);
/* PRE_LAUNCHAPP process file manipulation functions */
ProcessFileOps(T_PRE_LAUNCHAPP);
LaunchApps();
/* POST_LAUNCHAPP process file manipulation functions */
ProcessFileOps(T_POST_LAUNCHAPP);
/* DEPEND_REBOOT process file manipulation functions */
ProcessFileOps(T_DEPEND_REBOOT);
ProcessProgramFolderShowCmd();
if(NeedReboot())
{
CleanupXpcomFile();
hDlgCurrent = InstantiateDialog(hWndMain, DLG_RESTART, diReboot.szTitle, DlgProcReboot);
}
else
{
CleanupXpcomFile();
PostQuitMessage(0);
}
}
else
{
@ -2543,119 +2603,125 @@ void DlgSequenceNext()
}
else
{
bSDUserCanceled = TRUE;
CleanupXpcomFile();
PostQuitMessage(0);
}
}
else
{
bSDUserCanceled = TRUE;
CleanupXpcomFile();
PostQuitMessage(0);
}
gbProcessingXpnstallFiles = FALSE;
break;
}
gbProcessingXpnstallFiles = FALSE;
bDone = TRUE;
break;
}
} while(!bDone);
}
void DlgSequencePrev()
{
switch(dwWizardState)
BOOL bDone = FALSE;
do
{
case DLG_START_INSTALL:
dwWizardState = DLG_ADVANCED_SETTINGS;
gbProcessingXpnstallFiles = FALSE;
if(diAdvancedSettings.bShowDialog)
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diAdvancedSettings.szTitle, DlgProcAdvancedSettings);
else
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
break;
switch(dwWizardState)
{
case DLG_START_INSTALL:
dwWizardState = DLG_ADVANCED_SETTINGS;
gbProcessingXpnstallFiles = FALSE;
if(diAdvancedSettings.bShowDialog)
{
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diAdvancedSettings.szTitle, DlgProcAdvancedSettings);
bDone = TRUE;
}
break;
case DLG_ADVANCED_SETTINGS:
dwWizardState = DLG_DOWNLOAD_OPTIONS;
gbProcessingXpnstallFiles = FALSE;
if((diDownloadOptions.bShowDialog == TRUE) && (GetTotalArchivesToDownload() > 0))
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diDownloadOptions.szTitle, DlgProcDownloadOptions);
else
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
break;
case DLG_ADVANCED_SETTINGS:
dwWizardState = DLG_DOWNLOAD_OPTIONS;
gbProcessingXpnstallFiles = FALSE;
if((diDownloadOptions.bShowDialog == TRUE) && (GetTotalArchivesToDownload() > 0))
{
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diDownloadOptions.szTitle, DlgProcDownloadOptions);
bDone = TRUE;
}
break;
case DLG_DOWNLOAD_OPTIONS:
dwWizardState = DLG_PROGRAM_FOLDER;
gbProcessingXpnstallFiles = FALSE;
if(CheckWizardStateCustom(DLG_SELECT_COMPONENTS))
{
if(diProgramFolder.bShowDialog)
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diProgramFolder.szTitle, DlgProcProgramFolder);
else
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
}
else
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
break;
case DLG_DOWNLOAD_OPTIONS:
dwWizardState = DLG_PROGRAM_FOLDER;
gbProcessingXpnstallFiles = FALSE;
if(CheckWizardStateCustom(DLG_SELECT_COMPONENTS))
{
if(diProgramFolder.bShowDialog)
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diProgramFolder.szTitle, DlgProcProgramFolder);
bDone = TRUE;
}
break;
case DLG_PROGRAM_FOLDER:
dwWizardState = DLG_WINDOWS_INTEGRATION;
gbProcessingXpnstallFiles = FALSE;
if(diWindowsIntegration.bShowDialog)
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diWindowsIntegration.szTitle, DlgProcWindowsIntegration);
else
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
break;
case DLG_PROGRAM_FOLDER:
dwWizardState = DLG_WINDOWS_INTEGRATION;
gbProcessingXpnstallFiles = FALSE;
if(diWindowsIntegration.bShowDialog)
{
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diWindowsIntegration.szTitle, DlgProcWindowsIntegration);
bDone = TRUE;
}
break;
case DLG_WINDOWS_INTEGRATION:
dwWizardState = DLG_SELECT_ADDITIONAL_COMPONENTS;
gbProcessingXpnstallFiles = FALSE;
if((diSelectAdditionalComponents.bShowDialog) && (GetAdditionalComponentsCount() > 0))
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diSelectAdditionalComponents.szTitle, DlgProcSelectAdditionalComponents);
else
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
break;
case DLG_WINDOWS_INTEGRATION:
dwWizardState = DLG_SELECT_ADDITIONAL_COMPONENTS;
gbProcessingXpnstallFiles = FALSE;
if((diSelectAdditionalComponents.bShowDialog) && (GetAdditionalComponentsCount() > 0))
{
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diSelectAdditionalComponents.szTitle, DlgProcSelectAdditionalComponents);
bDone = TRUE;
}
break;
case DLG_SELECT_ADDITIONAL_COMPONENTS:
dwWizardState = DLG_SELECT_COMPONENTS;
gbProcessingXpnstallFiles = FALSE;
if(diSelectComponents.bShowDialog)
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diSelectComponents.szTitle, DlgProcSelectComponents);
else
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
break;
case DLG_SELECT_ADDITIONAL_COMPONENTS:
dwWizardState = DLG_SELECT_COMPONENTS;
gbProcessingXpnstallFiles = FALSE;
if(diSelectComponents.bShowDialog)
{
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diSelectComponents.szTitle, DlgProcSelectComponents);
bDone = TRUE;
}
break;
case DLG_SELECT_COMPONENTS:
dwWizardState = DLG_SETUP_TYPE;
gbProcessingXpnstallFiles = FALSE;
if(diSetupType.bShowDialog)
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diSetupType.szTitle, DlgProcSetupType);
else
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
break;
case DLG_SELECT_COMPONENTS:
dwWizardState = DLG_SETUP_TYPE;
gbProcessingXpnstallFiles = FALSE;
if(diSetupType.bShowDialog)
{
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diSetupType.szTitle, DlgProcSetupType);
bDone = TRUE;
}
break;
case DLG_SETUP_TYPE:
dwWizardState = DLG_LICENSE;
gbProcessingXpnstallFiles = FALSE;
if(diLicense.bShowDialog)
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diLicense.szTitle, DlgProcLicense);
else
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
break;
case DLG_SETUP_TYPE:
dwWizardState = DLG_LICENSE;
gbProcessingXpnstallFiles = FALSE;
if(diLicense.bShowDialog)
{
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diLicense.szTitle, DlgProcLicense);
bDone = TRUE;
}
break;
case DLG_LICENSE:
dwWizardState = DLG_WELCOME;
gbProcessingXpnstallFiles = FALSE;
if(diWelcome.bShowDialog)
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diWelcome.szTitle, DlgProcWelcome);
else
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
break;
case DLG_LICENSE:
dwWizardState = DLG_WELCOME;
gbProcessingXpnstallFiles = FALSE;
if(diWelcome.bShowDialog)
{
hDlgCurrent = InstantiateDialog(hWndMain, dwWizardState, diWelcome.szTitle, DlgProcWelcome);
bDone = TRUE;
}
break;
default:
dwWizardState = DLG_WELCOME;
gbProcessingXpnstallFiles = FALSE;
if(diWelcome.bShowDialog)
hDlgCurrent = InstantiateDialog(hWndMain, DLG_WELCOME, diWelcome.szTitle, DlgProcWelcome);
else
PostMessage(hWndMain, WM_COMMAND, IDWIZBACK, 0);
break;
}
default:
dwWizardState = DLG_WELCOME;
gbProcessingXpnstallFiles = FALSE;
if(diWelcome.bShowDialog)
{
hDlgCurrent = InstantiateDialog(hWndMain, DLG_WELCOME, diWelcome.szTitle, DlgProcWelcome);
bDone = TRUE;
}
break;
}
} while(!bDone);
}

Просмотреть файл

@ -62,5 +62,6 @@ void TruncateString(HWND hWnd, LPSTR szInPath, DWORD dwInPathBufSiz
void SaveDownloadOptions(HWND hDlg, HWND hwndCBSiteSelector);
WNDPROC SubclassWindow( HWND hWnd, WNDPROC NewWndProc);
LRESULT CALLBACK ListBoxBrowseWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
void DisableSystemMenuItems(HWND hWnd, BOOL bDisableClose);
#endif

Просмотреть файл

@ -87,51 +87,16 @@ BOOL InitDialogClass(HINSTANCE hInstance, HINSTANCE hSetupRscInst)
BOOL InitApplication(HINSTANCE hInstance, HINSTANCE hSetupRscInst)
{
BOOL bRv;
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW | CS_PARENTDC | CS_SAVEBITS;
wc.lpfnWndProc = (WNDPROC)DlgProcMain;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hSetupRscInst, MAKEINTRESOURCE(IDI_SETUP));
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_ACTIVECAPTION + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = CLASS_NAME_SETUP;
bRv = RegisterClass(&wc);
if(bRv == FALSE)
return(bRv);
return(InitDialogClass(hInstance, hSetupRscInst));
}
BOOL InitInstance(HINSTANCE hInstance, DWORD dwCmdShow)
{
HWND hWnd;
dwScreenX = GetSystemMetrics(SM_CXSCREEN);
dwScreenY = GetSystemMetrics(SM_CYSCREEN);
hInst = hInstance;
hWnd = CreateWindow(CLASS_NAME_SETUP,
CLASS_NAME_SETUP,
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_MAXIMIZE,
0,
0,
dwScreenX,
dwScreenY,
NULL,
NULL,
hInstance,
NULL);
if(!hWnd)
return(FALSE);
hWndMain = hWnd;
hWndMain = NULL;
return(TRUE);
}
@ -1841,6 +1806,8 @@ HRESULT InitSetupGeneral()
return(1);
if((sgProduct.szProgramName = NS_GlobalAlloc(MAX_BUF)) == NULL)
return(1);
if((sgProduct.szCompanyName = NS_GlobalAlloc(MAX_BUF)) == NULL)
return(1);
if((sgProduct.szProductName = NS_GlobalAlloc(MAX_BUF)) == NULL)
return(1);
if((sgProduct.szProgramFolderName = NS_GlobalAlloc(MAX_BUF)) == NULL)
@ -1874,6 +1841,7 @@ void DeInitSetupGeneral()
FreeMemory(&(sgProduct.szPath));
FreeMemory(&(sgProduct.szSubPath));
FreeMemory(&(sgProduct.szProgramName));
FreeMemory(&(sgProduct.szCompanyName));
FreeMemory(&(sgProduct.szProductName));
FreeMemory(&(sgProduct.szProgramFolderName));
FreeMemory(&(sgProduct.szProgramFolderPath));
@ -3061,11 +3029,11 @@ HRESULT InitComponentDiskSpaceInfo(dsN **dsnComponentDSRequirement)
AppendBackSlash(szBuf, sizeof(szBuf));
UpdatePathDiskSpaceRequired(szBuf, siCObject->ullInstallSize, dsnComponentDSRequirement);
if(*szSysPath != '\0')
UpdatePathDiskSpaceRequired(szSysPath, siCObject->ullInstallSizeSystem, dsnComponentDSRequirement);
if(*szTempDir != '\0')
UpdatePathDiskSpaceRequired(szTempDir, siCObject->ullInstallSizeArchive, dsnComponentDSRequirement);
if(*szSysPath != '\0')
UpdatePathDiskSpaceRequired(szSysPath, siCObject->ullInstallSizeSystem, dsnComponentDSRequirement);
}
++dwIndex0;
@ -4371,7 +4339,6 @@ COLORREF DecryptFontColor(LPSTR szColor)
HRESULT ParseConfigIni(LPSTR lpszCmdLine)
{
HDC hdc;
char szBuf[MAX_BUF];
char szMsgInitSetup[MAX_BUF];
char szPreviousPath[MAX_BUF];
@ -4417,14 +4384,8 @@ HRESULT ParseConfigIni(LPSTR lpszCmdLine)
SetSetupRunMode(szBuf);
ParseCommandLine(lpszCmdLine);
if((sgProduct.dwMode == NORMAL) || (sgProduct.dwMode == AUTO))
{
/* show blue background here */
ShowWindow(hWndMain, SW_MAXIMIZE);
UpdateWindow(hWndMain);
}
/* get product name description */
GetPrivateProfileString("General", "Company Name", "", sgProduct.szCompanyName, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("General", "Product Name", "", sgProduct.szProductName, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("General", "Sub Path", "", sgProduct.szSubPath, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("General", "Program Name", "", sgProduct.szProgramName, MAX_BUF, szFileIniConfig);
@ -4805,10 +4766,6 @@ HRESULT ParseConfigIni(LPSTR lpszCmdLine)
siCFXpcomFile.bCleanup = TRUE;
}
hdc = GetDC(hWndMain);
OutputSetupTitle(hdc);
ReleaseDC(hWndMain, hdc);
CleanupXpcomFile();
ShowMessage(szMsgInitSetup, FALSE);
@ -5349,45 +5306,22 @@ HRESULT DecryptVariable(LPSTR szVariable, DWORD dwVariableSize)
AppendBackSlash(szVariable, dwVariableSize);
lstrcat(szVariable, sgProduct.szProgramFolderName);
}
else if(lstrcmpi(szVariable, "Netscape Seamonkey CurrentVersion") == 0)
else if(lstrcmpi(szVariable, "Product CurrentVersion") == 0)
{
char szKey[MAX_BUF];
lstrcpy(szKey, "Software\\");
lstrcat(szKey, sgProduct.szCompanyName);
lstrcat(szKey, "\\");
lstrcat(szKey, sgProduct.szProductName);
/* parse for the current Netscape WinReg key */
GetWinReg(HKEY_LOCAL_MACHINE, "Software\\Netscape\\Netscape Seamonkey", "CurrentVersion", szBuf, sizeof(szBuf));
GetWinReg(HKEY_LOCAL_MACHINE, szKey, "CurrentVersion", szBuf, sizeof(szBuf));
if(*szBuf == '\0')
return(FALSE);
wsprintf(szVariable, "Software\\Netscape\\Netscape Seamonkey\\%s", szBuf);
}
else if(lstrcmpi(szVariable, "Netscape 6 CurrentVersion") == 0)
{
/* parse for the current Netscape WinReg key */
GetWinReg(HKEY_LOCAL_MACHINE, "Software\\Netscape\\Netscape 6", "CurrentVersion", szBuf, sizeof(szBuf));
if(*szBuf == '\0')
return(FALSE);
wsprintf(szVariable, "Software\\Netscape\\Netscape 6\\%s", szBuf);
}
else if(lstrcmpi(szVariable, "Netscape Netbusiness Messenger CurrentVersion") == 0)
{
/* parse for the current Netscape WinReg key */
GetWinReg(HKEY_LOCAL_MACHINE, "Software\\Netscape\\Netscape Netbusiness Messenger", "CurrentVersion", szBuf, sizeof(szBuf));
if(*szBuf == '\0')
return(FALSE);
wsprintf(szVariable, "Software\\Netscape\\Netscape Netbusiness Messenger\\%s", szBuf);
}
else if(lstrcmpi(szVariable, "Mozilla Seamonkey CurrentVersion") == 0)
{
/* parse for the current Mozilla WinReg key */
GetWinReg(HKEY_LOCAL_MACHINE, "Software\\Mozilla\\Mozilla Seamonkey", "CurrentVersion", szBuf, sizeof(szBuf));
if(*szBuf == '\0')
return(FALSE);
wsprintf(szVariable, "Software\\Mozilla\\Mozilla Seamonkey\\%s", szBuf);
wsprintf(szVariable, "Software\\%s\\%s\\%s", sgProduct.szCompanyName, sgProduct.szProductName, szBuf);
}
else
return(FALSE);

Просмотреть файл

@ -56,7 +56,7 @@ typedef int PRInt32;
#endif
#define CLASS_NAME_SETUP "Setup"
#define CLASS_NAME_SETUP_DLG "SetupDlg"
#define CLASS_NAME_SETUP_DLG "MozillaSetupDlg"
#define FILE_INI_SETUP "setup.ini"
#define FILE_INI_CONFIG "config.ini"
#define FILE_IDI_GETCONFIGINI "getconfigini.idi"
@ -277,6 +277,7 @@ typedef struct setupStruct
LPSTR szPath;
LPSTR szSubPath;
LPSTR szProgramName;
LPSTR szCompanyName;
LPSTR szProductName;
LPSTR szProgramFolderName;
LPSTR szProgramFolderPath;

Просмотреть файл

@ -368,6 +368,7 @@ ProgressDlgProc(HWND hWndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
switch (msg)
{
case WM_INITDIALOG:
DisableSystemMenuItems(hWndDlg, TRUE);
CenterWindow(hWndDlg);
return FALSE;

Просмотреть файл

@ -149,6 +149,7 @@
#define IDS_STR_DOWNLOAD_SITE 11026
#define IDS_STR_SAVE_INSTALLER_FILES 11027
#define IDS_MSG_INIT_SETUP 11028
#define IDS_STR_MESSAGEBOX_TITLE 11029
#define IDC_STATIC -1
// Next default values for new objects
@ -156,7 +157,7 @@
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 1
#define _APS_NEXT_RESOURCE_VALUE 112
#define _APS_NEXT_RESOURCE_VALUE 113
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1070
#define _APS_NEXT_SYMED_VALUE 101

Просмотреть файл

@ -53,7 +53,9 @@ END
//
DLG_WELCOME DIALOG DISCARDABLE 51, 56, 315, 205
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CLASS "MozillaSetupDlg"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "&Next >",IDWIZNEXT,188,186,53,14
@ -68,7 +70,9 @@ BEGIN
END
DLG_SETUP_TYPE DIALOG DISCARDABLE 51, 56, 315, 205
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CLASS "MozillaSetupDlg"
FONT 8, "MS Sans Serif"
BEGIN
CONTROL "",IDC_RADIO_ST0,"Button",BS_AUTORADIOBUTTON |
@ -89,7 +93,7 @@ BEGIN
DEFPUSHBUTTON "&Next >",IDWIZNEXT,188,186,53,14
PUSHBUTTON "&Cancel",IDCANCEL,252,186,53,14
LTEXT "",IDC_STATIC_MSG0,101,11,204,17,NOT WS_GROUP
CONTROL 108,IDC_STATIC,"Static",SS_BITMAP,11,11,80,160,
CONTROL 108,IDC_STATIC,"Static",SS_BITMAP,11,11,83,162,
WS_EX_CLIENTEDGE
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,11,179,295,1,
WS_EX_STATICEDGE
@ -99,7 +103,9 @@ BEGIN
END
DLG_SELECT_COMPONENTS DIALOG DISCARDABLE 51, 56, 315, 205
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CLASS "MozillaSetupDlg"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "&Next >",IDWIZNEXT,188,186,53,14
@ -125,7 +131,9 @@ BEGIN
END
DLG_WINDOWS_INTEGRATION DIALOG DISCARDABLE 51, 56, 315, 205
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CLASS "MozillaSetupDlg"
FONT 8, "MS Sans Serif"
BEGIN
CONTROL "Check0",IDC_CHECK0,"Button",BS_AUTOCHECKBOX | BS_TOP |
@ -148,7 +156,9 @@ BEGIN
END
DLG_PROGRAM_FOLDER DIALOG DISCARDABLE 51, 56, 315, 205
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CLASS "MozillaSetupDlg"
FONT 8, "MS Sans Serif"
BEGIN
EDITTEXT IDC_EDIT_PROGRAM_FOLDER,101,64,204,12,ES_AUTOHSCROLL
@ -167,7 +177,9 @@ BEGIN
END
DLG_LICENSE DIALOG DISCARDABLE 51, 56, 315, 205
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CLASS "MozillaSetupDlg"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "&Accept",IDWIZNEXT,188,186,53,14
@ -182,7 +194,9 @@ BEGIN
END
DLG_START_INSTALL DIALOG DISCARDABLE 51, 56, 315, 205
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CLASS "MozillaSetupDlg"
FONT 8, "MS Sans Serif"
BEGIN
EDITTEXT IDC_CURRENT_SETTINGS,101,67,204,106,ES_MULTILINE |
@ -219,7 +233,9 @@ BEGIN
END
DLG_RESTART DIALOG FIXED IMPURE 133, 69, 226, 110
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CLASS "MozillaSetupDlg"
FONT 8, "MS Sans Serif"
BEGIN
LTEXT "Setup has finished copying files to your computer. Before you can use the program, you must restart Windows or your computer.\n\n Choose one of the following options and click OK to finish setup.",
@ -232,14 +248,17 @@ BEGIN
END
DLG_MESSAGE DIALOG DISCARDABLE 0, 0, 236, 34
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
CLASS "MozillaSetupDlg"
FONT 8, "MS Sans Serif"
BEGIN
CTEXT "",IDC_MESSAGE,0,0,236,34,SS_CENTERIMAGE
END
DLG_EXTRACTING DIALOG DISCARDABLE 0, 0, 193, 73
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CLASS "MozillaSetupDlg"
FONT 8, "MS Sans Serif"
BEGIN
CONTROL "",IDC_GAUGE_FILE,"GaugeFile",0x0,9,52,175,11
@ -251,14 +270,16 @@ BEGIN
END
DLG_ADVANCED_SETTINGS DIALOG DISCARDABLE 51, 56, 315, 205
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CLASS "MozillaSetupDlg"
FONT 8, "MS Sans Serif"
BEGIN
EDITTEXT IDC_EDIT_PROXY_SERVER,147,57,152,12,ES_AUTOHSCROLL
EDITTEXT IDC_EDIT_PROXY_PORT,147,74,152,12,ES_AUTOHSCROLL
DEFPUSHBUTTON "&Ok",IDWIZNEXT,188,186,53,14
PUSHBUTTON "&Cancel",IDCANCEL,252,186,53,14
CONTROL 108,IDC_STATIC,"Static",SS_BITMAP,11,11,80,160,
CONTROL 108,IDC_STATIC,"Static",SS_BITMAP,11,11,83,162,
WS_EX_CLIENTEDGE
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,11,179,295,1,
WS_EX_STATICEDGE
@ -269,7 +290,9 @@ BEGIN
END
DLG_SELECT_ADDITIONAL_COMPONENTS DIALOG DISCARDABLE 51, 56, 315, 205
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CLASS "MozillaSetupDlg"
FONT 8, "MS Sans Serif"
BEGIN
PUSHBUTTON "< &Back",IDWIZBACK,134,186,53,14
@ -295,7 +318,7 @@ BEGIN
END
DLG_UPGRADE DIALOG DISCARDABLE 51, 56, 310, 166
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
FONT 8, "MS Sans Serif"
BEGIN
LTEXT "",IDC_MESSAGE0,17,13,276,31,NOT WS_GROUP
@ -308,7 +331,9 @@ BEGIN
END
DLG_DOWNLOAD_OPTIONS DIALOG DISCARDABLE 51, 56, 315, 205
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
CLASS "MozillaSetupDlg"
FONT 8, "MS Sans Serif"
BEGIN
LTEXT "",IDC_MESSAGE1,101,90,204,33,NOT WS_GROUP
@ -444,6 +469,7 @@ BEGIN
IDS_STR_DOWNLOAD_SITE "Download Site:"
IDS_STR_SAVE_INSTALLER_FILES "Save downloaded and Setup program files to:"
IDS_MSG_INIT_SETUP "Initializing Setup, please wait..."
IDS_STR_MESSAGEBOX_TITLE "%s Setup"
END
#endif // English (U.S.) resources

Просмотреть файл

@ -698,6 +698,8 @@ HRESULT InitUninstallGeneral()
return(1);
if((ugUninstall.szLogFilename = NS_GlobalAlloc(MAX_BUF)) == NULL)
return(1);
if((ugUninstall.szCompanyName = NS_GlobalAlloc(MAX_BUF)) == NULL)
return(1);
if((ugUninstall.szProductName = NS_GlobalAlloc(MAX_BUF)) == NULL)
return(1);
if((ugUninstall.szWrKey = NS_GlobalAlloc(MAX_BUF)) == NULL)
@ -725,6 +727,7 @@ void DeInitUninstallGeneral()
FreeMemory(&(ugUninstall.szUninstallFilename));
FreeMemory(&(ugUninstall.szUserAgent));
FreeMemory(&(ugUninstall.szWrKey));
FreeMemory(&(ugUninstall.szCompanyName));
FreeMemory(&(ugUninstall.szProductName));
FreeMemory(&(ugUninstall.szWrMainKey));
}
@ -1073,24 +1076,26 @@ HRESULT GetUninstallLogPath()
char szWindowsUninstallKey[MAX_BUF];
char szErrorMsg[MAX_BUF];
char szEUninstallLogFolder[MAX_BUF];
char szRootKey[MAX_BUF];
HKEY hkRoot;
if(*ugUninstall.szUserAgent != '\0')
{
hkRoot = ugUninstall.hWrMainRoot;
lstrcpy(szKey, ugUninstall.szWrMainKey);
AppendBackSlash(szKey, sizeof(szKey));
lstrcat(szKey, ugUninstall.szUserAgent);
AppendBackSlash(szKey, sizeof(szKey));
lstrcat(szKey, "Uninstall");
GetWinReg(ugUninstall.hWrMainRoot, szKey, "Uninstall Log Folder", szLogFolder, sizeof(szLogFolder));
GetWinReg(ugUninstall.hWrMainRoot, szKey, "Description", ugUninstall.szUninstallKeyDescription, sizeof(szLogFolder));
}
else
{
GetWinReg(ugUninstall.hWrRoot, ugUninstall.szWrKey, "Uninstall Log Folder", szLogFolder, sizeof(szLogFolder));
GetWinReg(ugUninstall.hWrRoot, ugUninstall.szWrKey, "Description", ugUninstall.szUninstallKeyDescription, sizeof(szLogFolder));
hkRoot = ugUninstall.hWrRoot;
strcpy(szKey, ugUninstall.szWrKey);
}
GetWinReg(hkRoot, szKey, "Uninstall Log Folder", szLogFolder, sizeof(szLogFolder));
GetWinReg(hkRoot, szKey, "Description", ugUninstall.szUninstallKeyDescription, sizeof(szLogFolder));
lstrcpy(szWindowsUninstallKey, "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\");
lstrcat(szWindowsUninstallKey, ugUninstall.szUninstallKeyDescription);
GetWinReg(HKEY_LOCAL_MACHINE, szWindowsUninstallKey, "DisplayName", ugUninstall.szDescription, sizeof(szLogFolder));
@ -1100,7 +1105,18 @@ HRESULT GetUninstallLogPath()
if(NS_LoadString(hInst, IDS_ERROR_UNINSTALL_LOG_FOLDER, szEUninstallLogFolder, MAX_BUF) == WIZ_OK)
{
lstrcpy(szBuf, "\n\n ");
lstrcat(szBuf, szLogFolder);
if(*szLogFolder == '\0')
{
GetStringRootKey(hkRoot, szRootKey, sizeof(szRootKey));
lstrcat(szBuf, szRootKey);
lstrcat(szBuf, "\\");
lstrcat(szBuf, szKey);
lstrcat(szBuf, "\\Uninstall Log Folder");
}
else
lstrcat(szBuf, szLogFolder);
lstrcat(szBuf, "\n");
wsprintf(szErrorMsg, szEUninstallLogFolder, szBuf);
PrintError(szErrorMsg, ERROR_CODE_SHOW);
@ -1134,6 +1150,7 @@ HRESULT ParseUninstallIni(LPSTR lpszCmdLine)
ParseCommandLine(lpszCmdLine);
/* get product name description */
GetPrivateProfileString("General", "Company Name", "", ugUninstall.szCompanyName, MAX_BUF, szFileIniUninstall);
GetPrivateProfileString("General", "Product Name", "", ugUninstall.szProductName, MAX_BUF, szFileIniUninstall);
GetPrivateProfileString("General", "Root Key", "", szBuf, MAX_BUF, szFileIniUninstall);
ugUninstall.hWrRoot = ParseRootKey(szBuf);
@ -1144,6 +1161,9 @@ HRESULT ParseUninstallIni(LPSTR lpszCmdLine)
{
DecryptString(ugUninstall.szWrKey, szKeyCrypted);
}
else
strcpy(ugUninstall.szWrKey, szKeyCrypted);
RemoveBackSlash(ugUninstall.szWrKey);
GetPrivateProfileString("General", "Main Root Key", "", szBuf, MAX_BUF, szFileIniUninstall);
@ -1155,6 +1175,9 @@ HRESULT ParseUninstallIni(LPSTR lpszCmdLine)
{
DecryptString(ugUninstall.szWrMainKey, szKeyCrypted);
}
else
strcpy(ugUninstall.szWrMainKey, szKeyCrypted);
RemoveBackSlash(ugUninstall.szWrMainKey);
GetPrivateProfileString("General", "Uninstall Filename", "", ugUninstall.szUninstallFilename, MAX_BUF, szFileIniUninstall);
@ -1480,57 +1503,33 @@ HRESULT DecryptVariable(LPSTR szVariable, DWORD dwVariableSize)
{
lstrcpy(szVariable, szUninstallDir);
}
else if(lstrcmpi(szVariable, "Netscape Seamonkey CurrentVersion") == 0)
else if(lstrcmpi(szVariable, "Product CurrentVersion") == 0)
{
char szKey[MAX_BUF];
lstrcpy(szKey, "Software\\");
lstrcat(szKey, ugUninstall.szCompanyName);
lstrcat(szKey, "\\");
lstrcat(szKey, ugUninstall.szProductName);
/* parse for the current Netscape WinReg key */
GetWinReg(HKEY_LOCAL_MACHINE, "Software\\Netscape\\Netscape Seamonkey", "CurrentVersion", szBuf, sizeof(szBuf));
GetWinReg(HKEY_LOCAL_MACHINE, szKey, "CurrentVersion", szBuf, sizeof(szBuf));
if(*szBuf == '\0')
return(FALSE);
wsprintf(szVariable, "Software\\Netscape\\Netscape Seamonkey\\%s", szBuf);
wsprintf(szVariable, "Software\\%s\\%s\\%s", ugUninstall.szCompanyName, ugUninstall.szProductName, szBuf);
}
else if(lstrcmpi(szVariable, "WinRegKey Netscape 6") == 0)
else if(lstrcmpi(szVariable, "Product WinRegKey") == 0)
{
lstrcpy(szVariable, "Software\\Netscape\\Netscape 6");
}
else if(lstrcmpi(szVariable, "Netscape 6 CurrentVersion") == 0)
{
/* parse for the current Netscape WinReg key */
GetWinReg(HKEY_LOCAL_MACHINE, "Software\\Netscape\\Netscape 6", "CurrentVersion", szBuf, sizeof(szBuf));
char szKey[MAX_BUF];
if(*szBuf == '\0')
return(FALSE);
lstrcpy(szKey, "Software\\");
lstrcat(szKey, ugUninstall.szCompanyName);
lstrcat(szKey, "\\");
lstrcat(szKey, ugUninstall.szProductName);
wsprintf(szVariable, "Software\\Netscape\\Netscape 6\\%s", szBuf);
}
else if(lstrcmpi(szVariable, "WinRegKey Netscape Netbusiness Messenger") == 0)
{
lstrcpy(szVariable, "Software\\Netscape\\Netscape Netbusiness Messenger");
}
else if(lstrcmpi(szVariable, "Netscape Netbusiness Messenger CurrentVersion") == 0)
{
/* parse for the current Netscape WinReg key */
GetWinReg(HKEY_LOCAL_MACHINE, "Software\\Netscape\\Netscape Netbusiness Messenger", "CurrentVersion", szBuf, sizeof(szBuf));
if(*szBuf == '\0')
return(FALSE);
wsprintf(szVariable, "Software\\Netscape\\Netscape Netbusiness Messenger\\%s", szBuf);
}
else if(lstrcmpi(szVariable, "WinRegKey Mozilla Seamonkey") == 0)
{
lstrcpy(szVariable, "Software\\Mozilla\\Mozilla Seamonkey");
}
else if(lstrcmpi(szVariable, "Mozilla Seamonkey CurrentVersion") == 0)
{
/* parse for the current Mozilla WinReg key */
GetWinReg(HKEY_LOCAL_MACHINE, "Software\\Mozilla\\Mozilla Seamonkey", "CurrentVersion", szBuf, sizeof(szBuf));
if(*szBuf == '\0')
return(FALSE);
wsprintf(szVariable, "Software\\Mozilla\\Mozilla Seamonkey\\%s", szBuf);
wsprintf(szVariable, "Software\\%s\\%s", ugUninstall.szCompanyName, ugUninstall.szProductName);
}
else
return(FALSE);

Просмотреть файл

@ -273,3 +273,59 @@ HKEY ParseRootKey(LPSTR szRootKey)
return(hkRootKey);
}
LPSTR GetStringRootKey(HKEY hkRootKey, LPSTR szString, DWORD dwStringSize)
{
if(hkRootKey == HKEY_CURRENT_CONFIG)
{
if(sizeof("HKEY_CURRENT_CONFIG") <= dwStringSize)
lstrcpy(szString, "HKEY_CURRENT_CONFIG");
else
return(NULL);
}
else if(hkRootKey == HKEY_CURRENT_USER)
{
if(sizeof("HKEY_CURRENT_USER") <= dwStringSize)
lstrcpy(szString, "HKEY_CURRENT_USER");
else
return(NULL);
}
else if(hkRootKey == HKEY_LOCAL_MACHINE)
{
if(sizeof("HKEY_LOCAL_MACHINE") <= dwStringSize)
lstrcpy(szString, "HKEY_LOCAL_MACHINE");
else
return(NULL);
}
else if(hkRootKey == HKEY_USERS)
{
if(sizeof("HKEY_USERS") <= dwStringSize)
lstrcpy(szString, "HKEY_USERS");
else
return(NULL);
}
else if(hkRootKey == HKEY_PERFORMANCE_DATA)
{
if(sizeof("HKEY_PERFORMANCE_DATA") <= dwStringSize)
lstrcpy(szString, "HKEY_PERFORMANCE_DATA");
else
return(NULL);
}
else if(hkRootKey == HKEY_DYN_DATA)
{
if(sizeof("HKEY_DYN_DATA") <= dwStringSize)
lstrcpy(szString, "HKEY_DYN_DATA");
else
return(NULL);
}
else
{
if(sizeof("HKEY_CLASSES_ROOT") <= dwStringSize)
lstrcpy(szString, "HKEY_CLASSES_ROOT");
else
return(NULL);
}
return(szString);
}

Просмотреть файл

@ -34,5 +34,6 @@ HRESULT FileDelete(LPSTR szDestination);
HRESULT DirectoryRemove(LPSTR szDestination, BOOL bRemoveSubdirs);
HRESULT CreateDirectoriesAll(char* szPath);
HKEY ParseRootKey(LPSTR szRootKey);
LPSTR GetStringRootKey(HKEY hkRootKey, LPSTR szString, DWORD dwStringSize);
#endif

Просмотреть файл

@ -110,6 +110,7 @@ typedef struct uninstallStruct
DWORD dwMode;
LPSTR szLogPath;
LPSTR szLogFilename;
LPSTR szCompanyName;
LPSTR szProductName;
LPSTR szDescription;
LPSTR szUninstallKeyDescription;