This fixes bugs #16350, 17631, 20259, 21575.

Installer registers in the Windows registry where mozilla.exe gets
installed to.

Installer is aware of the previous mozilla.exe installation location
and offers it as the default destination location.

Installer now is able to show a Readme.txt in the SetupType dialog.

Eliminated most of the "Netscape" and replaced it with "Mozilla"

a=chofmann
r=sgehani


git-svn-id: svn://10.0.0.236/trunk@56408 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
ssu%netscape.com
1999-12-22 20:19:34 +00:00
parent f857a60ed2
commit 3476f08bd7
11 changed files with 306 additions and 82 deletions

View File

@@ -7,7 +7,7 @@
; values.
Run Mode=Normal
Product Name=Netscape Seamonkey
Product Name=Mozilla Seamonkey
; Destination Path values:
; PROGRAMFILESDIR
@@ -45,7 +45,7 @@ Path=[PROGRAMFILESDIR]\Netscape\Seamonkey
; MEDIAPATH
; CONFIGPATH (supported only under Windows95 and Windows98)
; DEVICEPATH
Program Folder Name=Netscape Seamonkey
Program Folder Name=Mozilla Seamonkey
Program Folder Path=[COMMON_PROGRAMS]
; Default Setup Type values:
@@ -55,10 +55,25 @@ Program Folder Path=[COMMON_PROGRAMS]
; Setup Type 3 - fourth radio button (usually the Custom option)
Default Setup Type=Setup Type 0
Setup Title0=Netscape Seamonkey Setup
Setup Title0=Mozilla Seamonkey Setup
Setup Title1=Build $Version$
Setup Title2=
; HKey: valid decryptable setup keys are [Mozilla Seamonkey CurrentVersion]
; and [Mozilla Seamonkey CurrentVersion].
; Decrypt HKey: there are times when '[' and ']' are valid part of windows registry key names.
; Contains Filename: tells setup that the path contains filename needed to be removed before
; using it as a path.
; Verify Existance: FILE or PATH
;
[Locate Previous Product Path0]
HRoot=HKEY_LOCAL_MACHINE
HKey=[Netscape Seamonkey CurrentVersion]\Main
Name=Install Directory
Decrypt HKey=TRUE
Contains Filename=FALSE
Verify Existance=
[Dialog Welcome]
Show Dialog=TRUE
Title=Welcome
@@ -77,6 +92,8 @@ Message1=
Show Dialog=TRUE
Title=Setup Type
Message0=Click the type of Setup you prefer, then click Next.
Readme Filename=readme.txt
Readme App=notepad.exe
; at least one Setup Type needs to be set, and up to 4 can be
; set (Setup Type0, Setup Type1, Setup Type2, Setup Type3).
@@ -131,24 +148,24 @@ Message0=
[Dialog Windows Integration]
Show Dialog=FALSE
Title=Windows Integration
Message0=Check the Netscape Preference options you would like Setup to perform.
Message1=These settings allow you to set default Internet preferences for browsing and searching. They affect browsers installed on your machine, including Netscape Communicator and Microsoft Internet Explorer.
Message0=Check the Mozilla Preference options you would like Setup to perform.
Message1=These settings allow you to set default Internet preferences for browsing and searching. They affect browsers installed on your machine, including Mozilla Communicator and Microsoft Internet Explorer.
; Only a maximum of 4 "Windows Integration-Item"s are allowded. Each Item
; shows up as a checkbox in the Windows Integration dialog.
[Windows Integration-Item0]
CheckBoxState=FALSE
Description=Make Netscape Communicator my default Internet browser
Description=Make Mozilla Communicator my default Internet browser
Archive=
[Windows Integration-Item1]
CheckBoxState=FALSE
Description=Make Netscape Netcenter my home page
Description=Make Mozilla Netcenter my home page
Archive=
[Windows Integration-Item2]
CheckBoxState=FALSE
Description=Use Netscape Netcenter to search the Web
Description=Use Mozilla Netcenter to search the Web
Archive=
[Dialog Program Folder]
@@ -193,7 +210,7 @@ exe_param=
; Components dialog) for installation.
; There is no limit to the number of components to install.
[Component0]
Description Short=Netscape Seamonkey
Description Short=Mozilla Seamonkey
Description Long=Browser software for the internet
Archive=core.xpi
$InstallSize$:core
@@ -216,7 +233,7 @@ Archive=mail.xpi
$InstallSize$:mail
$InstallSizeSystem$
$InstallSizeArchive$:mail.xpi
;Dependency0=Netscape Seamonkey
;Dependency0=Mozilla Seamonkey
; Attributes can be the following values:
; SELECTED - the component is selected to be installed by default.
; INVISIBLE - the component is not shown in the Select Components dialog.
@@ -303,7 +320,7 @@ Message=Preparing SmartUpdate, please wait...
;Delete FileX sections
[Delete File0]
Timing=post download
Destination=[COMMON_PROGRAMS]\Netscape Seamonkey\Netscape AppRunner.lnk
Destination=[COMMON_PROGRAMS]\Mozilla Seamonkey\Mozilla AppRunner.lnk
;Remove DirectoryX sections
;[Remove Directory0]
@@ -353,7 +370,7 @@ Program Folder=[Default Folder]
File=[SETUP PATH]\mozilla.exe
Arguments=
Working Dir=[SETUP PATH]
Description=Netscape Mozilla
Description=Mozilla Seamonkey
Icon Path=[SETUP PATH]\mozilla.exe
Icon Id=0
@@ -361,7 +378,7 @@ Icon Id=0
;File=[SETUP PATH]\bin\viewer.exe
;Arguments=
;Working Dir=[SETUP PATH]
;Description=Netscape Viewer
;Description=Mozilla Viewer
;Icon Path=[SETUP PATH]\bin\viewer.exe
;Icon Id=0

View File

@@ -1,3 +1,41 @@
function updateWinReg()
{
//Notes:
// can't use a double backslash before subkey - Windows already puts it in.
// subkeys have to exist before values can be put in.
var winreg = getWinRegistry();
var subkey; //the name of the subkey you are poking around in
var valname; // the name of the value you want to look at
var value; //the data in the value you want to look at.
if(winreg != null)
{
winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
subkey = "SOFTWARE\\Netscape\\Netscape Seamonkey";
winreg.createKey(subkey,"");
valname = "CurrentVersion";
value = "$UserAgent$";
err = winreg.setValueString(subkey, valname, value);
subkey = "SOFTWARE\\Netscape\\Netscape Seamonkey\\$UserAgent$\\Main";
winreg.createKey(subkey,"");
valname = "Install Directory";
value = communicatorFolder;
err = winreg.setValueString(subkey, valname, value);
// set the App Paths key here
subkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\mozilla.exe";
winreg.createKey(subkey,"");
valname = "";
value = communicatorFolder + "\\mozilla.exe";
err = winreg.setValueString(subkey, valname, value);
valname = "Path";
value = communicatorFolder;
err = winreg.setValueString(subkey, valname, value);
}
}
// main
var srDest;
var err;
@@ -7,7 +45,7 @@ var fileComponentRegStr;
var fileComponentReg;
srDest = $SpaceRequired$:bin;
err = startInstall("Mozilla Seamonkey", "", "$Version$");
err = startInstall("Netscape Seamonkey", "", "$Version$");
logComment("startInstall: " + err);
communicatorFolder = getFolder("Communicator");
@@ -41,6 +79,8 @@ if(verifyDiskSpace(communicatorFolder, srDest) == true)
err = fileDelete(fileComponentReg);
logComment("fileDelete() returned: " + err);
updateWinReg();
err = finalizeInstall();
logComment("finalizeInstall() returned: " + err);
}

View File

@@ -50,6 +50,7 @@ $inStagePath = $ARGV[2];
$inDistPath = $ARGV[3];
$seiFileNameGeneric = "nsinstall.exe";
$seiFileNameSpecific = "mozilla-win32-installer.exe";
$userAgent = "5.0b1 (en)";
# Check for existance of staging path
if(!(-e "$inStagePath"))
@@ -112,7 +113,7 @@ sub MakeJsFile
my($componentName) = @_;
# Make .js file
if(system("perl makejs.pl $componentName.jst $inDefaultVersion $inStagePath\\$componentName") != 0)
if(system("perl makejs.pl $componentName.jst $inDefaultVersion \"$userAgent\" $inStagePath\\$componentName") != 0)
{
exit(1);
}

View File

@@ -27,24 +27,26 @@
# in the format of $Variable$ and replace it with the appropriate
# value(s).
#
# Input: .jst file - which is a .js template
# default version - a julian date in the form of:
# major.minor.release.yydoy
# ie: 5.0.0.99256
# staging path - path to where the components are staged at
# Input: .jst file - which is a .js template
# default version - a julian date in the form of:
# major.minor.release.yydoy
# ie: 5.0.0.99256
# user agent - user agent of product
# component staging path - path to where the components are staged at
#
# ie: perl makejs.pl core.jst 5.0.0.99256
#
# Make sure there are at least two arguments
if($#ARGV < 2)
if($#ARGV < 3)
{
die "usage: $0 <.jst file> <default version> <staging path>
die "usage: $0 <.jst file> <default version> <UserAgent> <staging path>
.jst file : .js template input file
default version : default julian base version number to use in the
form of: major.minor.release.yydoy
ie: 5.0.0.99256
user agent : user agent of product (5.0b1 [en])
component staging path : path to where this component is staged at
ie: z:\\stage\\windows\\32bit\\en\\5.0\\core
\n";
@@ -52,7 +54,8 @@ if($#ARGV < 2)
$inJstFile = $ARGV[0];
$inVersion = $ARGV[1];
$inStagePath = $ARGV[2];
$inUserAgent = $ARGV[2];
$inStagePath = $ARGV[3];
# Get the name of the file replacing the .jst extension with a .js extension
@inJstFileSplit = split(/\./,$inJstFile);
@@ -78,6 +81,10 @@ while($line = <fpInTemplate>)
{
$line =~ s/\$Version\$/$inVersion/i;
}
elsif($line =~ /\$UserAgent\$/i)
{
$line =~ s/\$UserAgent\$/$inUserAgent/i;
}
elsif($line =~ /\$SpaceRequired\$/i) # For each line read, search and replace $InstallSize$ with the calculated size
{
$spaceRequired = 0;

View File

@@ -527,6 +527,13 @@ LRESULT CALLBACK DlgProcSetupType(HWND hDlg, UINT msg, WPARAM wParam, LONG lPara
DlgSequenceNext();
break;
case IDC_README:
if(*diSetupType.szReadmeApp == '\0')
WinSpawn(diSetupType.szReadmeFilename, NULL, szSetupDir, SW_SHOWNORMAL, FALSE);
else
WinSpawn(diSetupType.szReadmeApp, diSetupType.szReadmeFilename, szSetupDir, SW_SHOWNORMAL, FALSE);
break;
case ID_WIZNEXT:
GetDlgItemText(hDlg, IDC_EDIT_DESTINATION, szTempSetupPath, MAX_PATH);
lstrcpy(sgProduct.szPath, szTempSetupPath);

View File

@@ -603,7 +603,7 @@ HRESULT RetrieveArchives()
any jar files needed to be downloaded */
if(FileExists(szFileIdiGetArchives))
{
DecriptString(szBuf, siSDObject.szCoreDir);
DecryptString(szBuf, siSDObject.szCoreDir);
lstrcpy(siSDObject.szCoreDir, szBuf);
WritePrivateProfileString("Netscape Install", "core_file", siSDObject.szCoreFile, szFileIdiGetArchives);
@@ -926,6 +926,10 @@ HRESULT InitDlgSetupType(diST *diDialog)
return(1);
if((diDialog->szMessage0 = NS_GlobalAlloc(MAX_BUF)) == NULL)
return(1);
if((diDialog->szReadmeFilename = NS_GlobalAlloc(MAX_BUF)) == NULL)
return(1);
if((diDialog->szReadmeApp = NS_GlobalAlloc(MAX_BUF)) == NULL)
return(1);
diDialog->stSetupType0.dwItems = 0;
diDialog->stSetupType1.dwItems = 0;
@@ -959,6 +963,8 @@ void DeInitDlgSetupType(diST *diDialog)
FreeMemory(&(diDialog->szTitle));
FreeMemory(&(diDialog->szMessage0));
FreeMemory(&(diDialog->szReadmeFilename));
FreeMemory(&(diDialog->szReadmeApp));
FreeMemory(&(diDialog->stSetupType0.szDescriptionShort));
FreeMemory(&(diDialog->stSetupType0.szDescriptionLong));
FreeMemory(&(diDialog->stSetupType1.szDescriptionShort));
@@ -1978,7 +1984,7 @@ void InitSiComponents(char *szFileIni)
/* get commandline parameter for component */
GetPrivateProfileString(szComponentItem, "Parameter", "", szBuf, MAX_BUF, szFileIni);
DecriptString(siCTemp->szParameter, szBuf);
DecryptString(siCTemp->szParameter, szBuf);
/* get install size required in destination for component. Sould be in Kilobytes */
GetPrivateProfileString(szComponentItem, "Install Size", "", szBuf, MAX_BUF, szFileIni);
@@ -2305,18 +2311,23 @@ HRESULT ParseConfigIni(LPSTR lpszCmdLine)
GetPrivateProfileString("General", "Product Name", "", sgProduct.szProductName, MAX_BUF, szFileIniConfig);
/* get main install path */
GetPrivateProfileString("General", "Path", "", szBuf, MAX_BUF, szFileIniConfig);
DecriptString(sgProduct.szPath, szBuf);
if(LocatePreviousPath(sgProduct.szPath, MAX_PATH) == FALSE)
{
GetPrivateProfileString("General", "Path", "", szBuf, MAX_BUF, szFileIniConfig);
DecryptString(sgProduct.szPath, szBuf);
}
RemoveBackSlash(sgProduct.szPath);
/* make a copy of sgProduct.szPath to be used in the Setup Type dialog */
lstrcpy(szTempSetupPath, sgProduct.szPath);
/* get main program folder path */
GetPrivateProfileString("General", "Program Folder Path", "", szBuf, MAX_BUF, szFileIniConfig);
DecriptString(sgProduct.szProgramFolderPath, szBuf);
DecryptString(sgProduct.szProgramFolderPath, szBuf);
/* get main program folder name */
GetPrivateProfileString("General", "Program Folder Name", "", szBuf, MAX_BUF, szFileIniConfig);
DecriptString(sgProduct.szProgramFolderName, szBuf);
DecryptString(sgProduct.szProgramFolderName, szBuf);
/* get setup title strings */
GetPrivateProfileString("General", "Setup Title0", "", sgProduct.szSetupTitle0, MAX_BUF, szFileIniConfig);
@@ -2324,26 +2335,28 @@ HRESULT ParseConfigIni(LPSTR lpszCmdLine)
GetPrivateProfileString("General", "Setup Title2", "", sgProduct.szSetupTitle2, MAX_BUF, szFileIniConfig);
/* Welcome dialog */
GetPrivateProfileString("Dialog Welcome", "Show Dialog", "", szShowDialog, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog Welcome", "Title", "", diWelcome.szTitle, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog Welcome", "Message0", "", diWelcome.szMessage0, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog Welcome", "Message1", "", diWelcome.szMessage1, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog Welcome", "Message2", "", diWelcome.szMessage2, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog Welcome", "Show Dialog", "", szShowDialog, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog Welcome", "Title", "", diWelcome.szTitle, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog Welcome", "Message0", "", diWelcome.szMessage0, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog Welcome", "Message1", "", diWelcome.szMessage1, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog Welcome", "Message2", "", diWelcome.szMessage2, MAX_BUF, szFileIniConfig);
if(lstrcmpi(szShowDialog, "TRUE") == 0)
diWelcome.bShowDialog = TRUE;
/* License dialog */
GetPrivateProfileString("Dialog License", "Show Dialog", "", szShowDialog, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog License", "Title", "", diLicense.szTitle, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog License", "License File", "", diLicense.szLicenseFilename, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog License", "Message0", "", diLicense.szMessage0, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog License", "Show Dialog", "", szShowDialog, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog License", "Title", "", diLicense.szTitle, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog License", "License File", "", diLicense.szLicenseFilename, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog License", "Message0", "", diLicense.szMessage0, MAX_BUF, szFileIniConfig);
if(lstrcmpi(szShowDialog, "TRUE") == 0)
diLicense.bShowDialog = TRUE;
/* Setup Type dialog */
GetPrivateProfileString("Dialog Setup Type", "Show Dialog", "", szShowDialog, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog Setup Type", "Title", "", diSetupType.szTitle, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog Setup Type", "Message0", "", diSetupType.szMessage0, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog Setup Type", "Show Dialog", "", szShowDialog, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog Setup Type", "Title", "", diSetupType.szTitle, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog Setup Type", "Message0", "", diSetupType.szMessage0, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog Setup Type", "Readme Filename", "", diSetupType.szReadmeFilename, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Dialog Setup Type", "Readme App", "", diSetupType.szReadmeApp, MAX_BUF, szFileIniConfig);
if(lstrcmpi(szShowDialog, "TRUE") == 0)
diSetupType.bShowDialog = TRUE;
@@ -2532,9 +2545,9 @@ HRESULT ParseConfigIni(LPSTR lpszCmdLine)
GetPrivateProfileString("SmartDownload-Execution", "exe_param", "", siSDObject.szExeParam, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Core", "Source", "", szBuf, MAX_BUF, szFileIniConfig);
DecriptString(siCFCoreFile.szSource, szBuf);
DecryptString(siCFCoreFile.szSource, szBuf);
GetPrivateProfileString("Core", "Destination", "", szBuf, MAX_BUF, szFileIniConfig);
DecriptString(siCFCoreFile.szDestination, szBuf);
DecryptString(siCFCoreFile.szDestination, szBuf);
GetPrivateProfileString("Core", "Message", "", siCFCoreFile.szMessage, MAX_BUF, szFileIniConfig);
GetPrivateProfileString("Core", "Cleanup", "", szBuf, MAX_BUF, szFileIniConfig);
if(lstrcmpi(szBuf, "FALSE") == 0)
@@ -2554,6 +2567,118 @@ HRESULT ParseConfigIni(LPSTR lpszCmdLine)
return(0);
}
BOOL LocatePreviousPath(LPSTR szPath, DWORD dwPathSize)
{
DWORD dwIndex;
char szIndex[MAX_BUF];
char szSection[MAX_BUF];
char szHKey[MAX_BUF];
char szHRoot[MAX_BUF];
char szName[MAX_BUF];
char szVerifyExistance[MAX_BUF];
char szBuf[MAX_BUF];
BOOL bDecryptKey;
BOOL bContainsFilename;
BOOL bReturn;
HKEY hkeyRoot;
bReturn = FALSE;
dwIndex = 0;
itoa(dwIndex, szIndex, 10);
lstrcpy(szSection, "Locate Previous Product Path");
lstrcat(szSection, szIndex);
GetPrivateProfileString(szSection, "HKey", "", szHKey, MAX_BUF, szFileIniConfig);
while(*szHKey != '\0')
{
bReturn = FALSE;
ZeroMemory(szPath, dwPathSize);
GetPrivateProfileString(szSection, "HRoot", "", szHRoot, MAX_BUF, szFileIniConfig);
GetPrivateProfileString(szSection, "Name", "", szName, MAX_BUF, szFileIniConfig);
GetPrivateProfileString(szSection, "Verify Existance", "", szVerifyExistance, MAX_BUF, szFileIniConfig);
GetPrivateProfileString(szSection, "Decrypt HKey", "", szBuf, MAX_BUF, szFileIniConfig);
if(lstrcmpi(szBuf, "FALSE") == 0)
bDecryptKey = FALSE;
else
bDecryptKey = TRUE;
GetPrivateProfileString(szSection, "Contains Filename", "", szBuf, MAX_BUF, szFileIniConfig);
if(lstrcmpi(szBuf, "FALSE") == 0)
bContainsFilename = FALSE;
else
bContainsFilename = TRUE;
if(lstrcmpi(szHRoot, "HKEY_CLASSES_ROOT") == 0)
hkeyRoot = HKEY_CLASSES_ROOT;
else if(lstrcmpi(szHRoot, "HKEY_CURRENT_CONFIG") == 0)
hkeyRoot = HKEY_CURRENT_CONFIG;
else if(lstrcmpi(szHRoot, "HKEY_CURRENT_USER") == 0)
hkeyRoot = HKEY_CURRENT_USER;
else if(lstrcmpi(szHRoot, "HKEY_LOCAL_MACHINE") == 0)
hkeyRoot = HKEY_LOCAL_MACHINE;
else if(lstrcmpi(szHRoot, "HKEY_USERS") == 0)
hkeyRoot = HKEY_USERS;
if(bDecryptKey == TRUE)
{
DecryptString(szBuf, szHKey);
lstrcpy(szHKey, szBuf);
}
GetWinReg(hkeyRoot, szHKey, szName, szBuf, sizeof(szBuf));
if(*szBuf != '\0')
{
if(lstrcmpi(szVerifyExistance, "FILE") == 0)
{
if(FileExists(szBuf))
{
if(bContainsFilename == TRUE)
ParsePath(szBuf, szPath, dwPathSize, PP_PATH_ONLY);
else
lstrcpy(szPath, szBuf);
bReturn = TRUE;
}
else
bReturn = FALSE;
}
else if(lstrcmpi(szVerifyExistance, "PATH") == 0)
{
if(bContainsFilename == TRUE)
ParsePath(szBuf, szPath, dwPathSize, PP_PATH_ONLY);
else
lstrcpy(szPath, szBuf);
if(FileExists(szPath))
bReturn = TRUE;
else
bReturn = FALSE;
}
else
{
if(bContainsFilename == TRUE)
ParsePath(szBuf, szPath, dwPathSize, PP_PATH_ONLY);
else
lstrcpy(szPath, szBuf);
bReturn = TRUE;
}
// break if a valid path was found, else keep looking
if(bReturn == TRUE)
break;
}
++dwIndex;
itoa(dwIndex, szIndex, 10);
lstrcpy(szSection, "Locate Previous Product Path");
lstrcat(szSection, szIndex);
GetPrivateProfileString(szSection, "HKey", "", szHKey, MAX_BUF, szFileIniConfig);
}
return(bReturn);
}
void SetCustomType()
{
if(diSetupType.stSetupType3.bVisible == TRUE)
@@ -2606,13 +2731,14 @@ void GetWinReg(HKEY hkRootKey, LPSTR szKey, LPSTR szName, LPSTR szReturnValue, D
DWORD dwErr;
char szBuf[MAX_BUF];
memset(szBuf, '\0', MAX_BUF);
ZeroMemory(szBuf, sizeof(szBuf));
ZeroMemory(szReturnValue, dwSize);
if((dwErr = RegOpenKeyEx(hkRootKey, szKey, 0, KEY_READ, &hkResult)) == ERROR_SUCCESS)
{
dwErr = RegQueryValueEx(hkResult, szName, 0, NULL, szBuf, &dwSize);
if((*szReturnValue != '\0') && (dwErr == ERROR_SUCCESS))
if((*szBuf != '\0') && (dwErr == ERROR_SUCCESS))
ExpandEnvironmentStrings(szBuf, szReturnValue, MAX_BUF);
else
*szReturnValue = '\0';
@@ -2651,7 +2777,7 @@ void SetWinReg(HKEY hkRootKey, LPSTR szKey, LPSTR szName, DWORD dwType, LPSTR sz
}
}
HRESULT DecriptVariable(LPSTR szVariable, DWORD dwVariableSize)
HRESULT DecryptVariable(LPSTR szVariable, DWORD dwVariableSize)
{
char szBuf[MAX_BUF];
char szKey[MAX_BUF];
@@ -2659,10 +2785,10 @@ HRESULT DecriptVariable(LPSTR szVariable, DWORD dwVariableSize)
char szValue[MAX_BUF];
/* zero out the memory allocations */
ZeroMemory(szBuf, sizeof(szBuf));
ZeroMemory(szKey, sizeof(szKey));
ZeroMemory(szName, sizeof(szName));
ZeroMemory(szValue, sizeof(szValue));
ZeroMemory(szBuf, sizeof(szBuf));
ZeroMemory(szKey, sizeof(szKey));
ZeroMemory(szName, sizeof(szName));
ZeroMemory(szValue, sizeof(szValue));
if(lstrcmpi(szVariable, "PROGRAMFILESDIR") == 0)
{
@@ -2915,13 +3041,33 @@ HRESULT DecriptVariable(LPSTR szVariable, DWORD dwVariableSize)
AppendBackSlash(szVariable, dwVariableSize);
lstrcat(szVariable, sgProduct.szProgramFolderName);
}
else if(lstrcmpi(szVariable, "Netscape Seamonkey CurrentVersion") == 0)
{
/* parse for the current Netscape WinReg key */
GetWinReg(HKEY_LOCAL_MACHINE, "Software\\Netscape\\Netscape Seamonkey", "CurrentVersion", szBuf, sizeof(szBuf));
if(*szBuf == '\0')
return(FALSE);
wsprintf(szVariable, "Software\\Netscape\\Netscape Seamonkey\\%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);
}
else
return(FALSE);
return(TRUE);
}
HRESULT DecriptString(LPSTR szOutputStr, LPSTR szInputStr)
HRESULT DecryptString(LPSTR szOutputStr, LPSTR szInputStr)
{
DWORD dwLenInputStr;
DWORD dwCounter;
@@ -2935,7 +3081,7 @@ HRESULT DecriptString(LPSTR szOutputStr, LPSTR szInputStr)
char szResultStr[MAX_BUF];
BOOL bFoundVar;
BOOL bBeginParse;
BOOL bDecripted;
BOOL bDecrypted;
/* zero out the memory addresses */
memset(szBuf, '\0', MAX_BUF);
@@ -3008,14 +3154,14 @@ HRESULT DecriptString(LPSTR szOutputStr, LPSTR szInputStr)
}
RemoveBackSlash(szVariable);
bDecripted = TRUE;
bDecrypted = TRUE;
}
else
{
bDecripted = DecriptVariable(szVariable, MAX_BUF);
bDecrypted = DecryptVariable(szVariable, MAX_BUF);
}
if(!bDecripted)
if(!bDecrypted)
{
/* Variable was not able to be dcripted. */
/* Leave the variable as it was read in by adding the '[' and ']' */
@@ -3030,9 +3176,9 @@ HRESULT DecriptString(LPSTR szOutputStr, LPSTR szInputStr)
lstrcat(szOutputStr, szVariable);
lstrcat(szOutputStr, szAppend);
if(bDecripted)
if(bDecrypted)
{
DecriptString(szResultStr, szOutputStr);
DecryptString(szResultStr, szOutputStr);
lstrcpy(szOutputStr, szResultStr);
}
}

View File

@@ -35,8 +35,8 @@ HRESULT NS_LoadStringAlloc(HANDLE hInstance, DWORD dwID, LPSTR *szStri
HRESULT NS_LoadString(HANDLE hInstance, DWORD dwID, LPSTR szStringBuf, DWORD dwStringBuf);
HRESULT WinSpawn(LPSTR szClientName, LPSTR szParameters, LPSTR szCurrentDir, int iShowCmd, BOOL bWait);
HRESULT ParseConfigIni(LPSTR lpszCmdLine);
HRESULT DecriptString(LPSTR szOutputStr, LPSTR szInputStr);
HRESULT DecriptVariable(LPSTR szVariable, DWORD dwVariableSize);
HRESULT DecryptString(LPSTR szOutputStr, LPSTR szInputStr);
HRESULT DecryptVariable(LPSTR szVariable, DWORD dwVariableSize);
void GetWinReg(HKEY hkRootKey, LPSTR szKey, LPSTR szName, LPSTR szReturnValue, DWORD dwSize);
void SetWinReg(HKEY hkRootKey, LPSTR szKey, LPSTR szName, DWORD dwType, LPSTR szData, DWORD dwSize);
HRESULT InitSetupGeneral(void);
@@ -114,6 +114,7 @@ HRESULT ErrorMsgDiskSpace(ULONGLONG ullDSAvailable, ULONGLONG ullDSReq
void SetCustomType(void);
void GetAlternateArchiveSearchPath(LPSTR lpszCmdLine);
BOOL NeedReboot(void);
BOOL LocatePreviousPath(LPSTR szPath, DWORD dwPathSize);
BOOL bSDInit;

View File

@@ -177,9 +177,9 @@ HRESULT ProcessUncompressFile(DWORD dwTiming)
{
if(TimingCheck(dwTiming, szSection, szFileIniConfig))
{
DecriptString(szSource, szBuf);
DecryptString(szSource, szBuf);
GetPrivateProfileString(szSection, "Destination", "", szBuf, MAX_BUF, szFileIniConfig);
DecriptString(szDestination, szBuf);
DecryptString(szDestination, szBuf);
GetPrivateProfileString(szSection, "Message", "", szBuf, MAX_BUF, szFileIniConfig);
ShowMessage(szBuf, TRUE);
@@ -275,9 +275,9 @@ HRESULT ProcessMoveFile(DWORD dwTiming)
{
if(TimingCheck(dwTiming, szSection, szFileIniConfig))
{
DecriptString(szSource, szBuf);
DecryptString(szSource, szBuf);
GetPrivateProfileString(szSection, "Destination", "", szBuf, MAX_BUF, szFileIniConfig);
DecriptString(szDestination, szBuf);
DecryptString(szDestination, szBuf);
FileMove(szSource, szDestination);
}
@@ -363,9 +363,9 @@ HRESULT ProcessCopyFile(DWORD dwTiming)
{
if(TimingCheck(dwTiming, szSection, szFileIniConfig))
{
DecriptString(szSource, szBuf);
DecryptString(szSource, szBuf);
GetPrivateProfileString(szSection, "Destination", "", szBuf, MAX_BUF, szFileIniConfig);
DecriptString(szDestination, szBuf);
DecryptString(szDestination, szBuf);
GetPrivateProfileString(szSection, "Fail If Exists", "", szBuf, MAX_BUF, szFileIniConfig);
if(lstrcmpi(szBuf, "TRUE") == 0)
@@ -425,7 +425,7 @@ HRESULT ProcessCreateDirectory(DWORD dwTiming)
{
if(TimingCheck(dwTiming, szSection, szFileIniConfig))
{
DecriptString(szDestination, szBuf);
DecryptString(szDestination, szBuf);
AppendBackSlash(szDestination, sizeof(szDestination));
CreateDirectoriesAll(szDestination);
}
@@ -498,7 +498,7 @@ HRESULT ProcessDeleteFile(DWORD dwTiming)
{
if(TimingCheck(dwTiming, szSection, szFileIniConfig))
{
DecriptString(szDestination, szBuf);
DecryptString(szDestination, szBuf);
FileDelete(szDestination);
}
@@ -576,7 +576,7 @@ HRESULT ProcessRemoveDirectory(DWORD dwTiming)
{
if(TimingCheck(dwTiming, szSection, szFileIniConfig))
{
DecriptString(szDestination, szBuf);
DecryptString(szDestination, szBuf);
GetPrivateProfileString(szSection, "Remove subdirs", "", szBuf, MAX_BUF, szFileIniConfig);
bRemoveSubdirs = FALSE;
if(lstrcmpi(szBuf, "TRUE") == 0)
@@ -614,11 +614,11 @@ HRESULT ProcessRunApp(DWORD dwTiming)
{
if(TimingCheck(dwTiming, szSection, szFileIniConfig))
{
DecriptString(szTarget, szBuf);
DecryptString(szTarget, szBuf);
GetPrivateProfileString(szSection, "Parameters", "", szBuf, MAX_BUF, szFileIniConfig);
DecriptString(szParameters, szBuf);
DecryptString(szParameters, szBuf);
GetPrivateProfileString(szSection, "WorkingDir", "", szBuf, MAX_BUF, szFileIniConfig);
DecriptString(szWorkingDir, szBuf);
DecryptString(szWorkingDir, szBuf);
GetPrivateProfileString(szSection, "Wait", "", szBuf, MAX_BUF, szFileIniConfig);
if(lstrcmpi(szBuf, "FALSE") == 0)
@@ -671,7 +671,7 @@ HRESULT ProcessProgramFolder(DWORD dwTiming)
{
if(TimingCheck(dwTiming, szSection0, szFileIniConfig))
{
DecriptString(szProgramFolder, szBuf);
DecryptString(szProgramFolder, szBuf);
dwIndex1 = 0;
itoa(dwIndex1, szIndex1, 10);
@@ -681,15 +681,15 @@ HRESULT ProcessProgramFolder(DWORD dwTiming)
GetPrivateProfileString(szSection1, "File", "", szBuf, MAX_BUF, szFileIniConfig);
while(*szBuf != '\0')
{
DecriptString(szFile, szBuf);
DecryptString(szFile, szBuf);
GetPrivateProfileString(szSection1, "Arguments", "", szBuf, MAX_BUF, szFileIniConfig);
DecriptString(szArguments, szBuf);
DecryptString(szArguments, szBuf);
GetPrivateProfileString(szSection1, "Working Dir", "", szBuf, MAX_BUF, szFileIniConfig);
DecriptString(szWorkingDir, szBuf);
DecryptString(szWorkingDir, szBuf);
GetPrivateProfileString(szSection1, "Description", "", szBuf, MAX_BUF, szFileIniConfig);
DecriptString(szDescription, szBuf);
DecryptString(szDescription, szBuf);
GetPrivateProfileString(szSection1, "Icon Path", "", szBuf, MAX_BUF, szFileIniConfig);
DecriptString(szIconPath, szBuf);
DecryptString(szIconPath, szBuf);
GetPrivateProfileString(szSection1, "Icon Id", "", szBuf, MAX_BUF, szFileIniConfig);
if(*szBuf != '\0')
dwIconId = atol(szBuf);
@@ -732,7 +732,7 @@ HRESULT ProcessProgramFolderShowCmd()
GetPrivateProfileString(szSection0, "Program Folder", "", szBuf, MAX_BUF, szFileIniConfig);
while(*szBuf != '\0')
{
DecriptString(szProgramFolder, szBuf);
DecryptString(szProgramFolder, szBuf);
GetPrivateProfileString(szSection0, "Show Folder", "", szBuf, MAX_BUF, szFileIniConfig);
if(strcmpi(szBuf, "HIDE") == 0)

View File

@@ -169,6 +169,8 @@ typedef struct dlgSetupType
BOOL bShowDialog;
LPSTR szTitle;
LPSTR szMessage0;
LPSTR szReadmeFilename;
LPSTR szReadmeApp;
st stSetupType0;
st stSetupType1;
st stSetupType2;

View File

@@ -74,6 +74,8 @@
#define IDC_STATIC_MSG0 1046
#define IDC_MESSAGE 1049
#define IDC_LIST1 1053
#define IDC_BUTTON1 1055
#define IDC_README 1055
#define DLG_WELCOME 2001
#define DLG_LICENSE 2002
#define DLG_SETUP_TYPE 2003
@@ -102,9 +104,9 @@
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 1
#define _APS_NEXT_RESOURCE_VALUE 111
#define _APS_NEXT_RESOURCE_VALUE 112
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1055
#define _APS_NEXT_CONTROL_VALUE 1058
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View File

@@ -69,7 +69,7 @@ END
DLG_SETUP_TYPE DIALOGEX 51, 56, 315, 205
STYLE WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Sans Serif", 0, 0, 0x1
FONT 8, "MS Sans Serif"
BEGIN
CONTROL "",IDC_RADIO_ST0,"Button",BS_AUTORADIOBUTTON |
WS_TABSTOP,102,31,65,8
@@ -82,7 +82,6 @@ BEGIN
LTEXT "",IDC_STATIC_ST1_DESCRIPTION,175,59,126,24
LTEXT "",IDC_STATIC_ST2_DESCRIPTION,175,86,126,24
GROUPBOX "&Destination Directory",IDC_STATIC,101,147,204,27
EDITTEXT IDC_EDIT_DESTINATION,106,157,144,12,ES_AUTOHSCROLL
PUSHBUTTON "B&rowse...",IDC_BUTTON_BROWSE,255,157,46,12
PUSHBUTTON "< &Back",ID_WIZBACK,134,186,53,12
DEFPUSHBUTTON "&Next >",ID_WIZNEXT,188,186,53,12
@@ -92,6 +91,8 @@ BEGIN
WS_EX_CLIENTEDGE
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,11,179,295,1,
WS_EX_STATICEDGE
PUSHBUTTON "Readme",IDC_README,11,186,53,12
LTEXT "Static",IDC_EDIT_DESTINATION,107,160,144,9
END
DLG_SELECT_COMPONENTS DIALOGEX 51, 56, 315, 205