function registerProgramFolderKey(winreg, fFolderPath) { var subkey; var valname; var value; var err; /* set the Program Folder Path in the Mozilla key in the Windows Registry */ subkey = "SOFTWARE\\$CompanyName$"; winreg.createKey(subkey,""); valname = "CurrentVersion"; subkey = "SOFTWARE\\$CompanyName$\\$ProductName$"; winreg.createKey(subkey,""); valname = "CurrentVersion"; value = "$UserAgent$"; err = winreg.setValueString(subkey, valname, value); subkey = "SOFTWARE\\$CompanyName$\\$ProductName$\\$UserAgent$"; winreg.createKey(subkey,""); subkey = "SOFTWARE\\$CompanyName$\\$ProductName$\\$UserAgent$\\Main"; winreg.createKey(subkey,""); valname = "Program Folder Path"; value = fFolderPath; err = winreg.setValueString(subkey, valname, value); } function createShortcuts() { var subkey; var valname; var szStartMenuPrograms; var szStartMenu; var szFolderDesktop; var szFolderQuickLaunch; var szFolderSendTo; var szFolderAppData; var winreg; var fWindows; var fTemp; var fProgram; var fileExe; var scExeDesc; var scProfileDesc; var scProfileDescParam; var scFolderName; var fFolderDesktop; var fFolderPath; var fFolderPathStr; var fFolderQuickLaunch; var is_winnt; var szCurrentVersion; var restrictedAccess; var ikwDefined; var folderQuickLaunchExists; winreg = getWinRegistry(); fWindows = getFolder("Windows"); fProgram = getFolder("Program"); fTemp = fProgram + "$MainExeFile$"; fileExe = getFolder("file:///", fTemp); scExeDesc = "Mail"; scParam = "-mail"; scFolderName = "$ProductName$"; if(winreg != null) { /* This will check to see if the user has restricted access or not. * It checks to see if HKEY_LOCALMACHINE\SOFTWARE is writable. If * it is, then access is not restricted. This is only used to * determine which Desktop, Programs, and Start Menu folders * are to used: common or per user */ restrictedAccess = false; ikwDefined = typeof(winreg.isKeyWritable); logComment("winreg.isKeyWritable(): " + ikwDefined); if(ikwDefined == "function") { winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE); if(!winreg.isKeyWritable("SOFTWARE")) restrictedAccess = true; } /* determine if the script is running under NT or not */ winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE); subkey = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"; valname = "CurrentVersion"; szCurrentVersion = winreg.getValueString(subkey, valname); logComment("szCurrentVersion: " + szCurrentVersion); if((szCurrentVersion == "") || (szCurrentVersion == null)) { is_winnt = false; } else { is_winnt = true; } logComment("is_winnt value: " + is_winnt); logComment("restrictedAccess value: " + restrictedAccess); if(!is_winnt || restrictedAccess) { winreg.setRootKey(winreg.HKEY_CURRENT_USER); subkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"; valname = "Programs"; szStartMenuPrograms = winreg.getValueString(subkey, valname); valname = "Start Menu"; szStartMenu = winreg.getValueString(subkey, valname); valname = "Desktop"; szFolderDesktop = winreg.getValueString(subkey, valname); } else { winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE); subkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"; valname = "Common Programs"; szStartMenuPrograms = winreg.getValueString(subkey, valname); valname = "Common Start Menu"; szStartMenu = winreg.getValueString(subkey, valname); valname = "Common Desktop"; szFolderDesktop = winreg.getValueString(subkey, valname); } winreg.setRootKey(winreg.HKEY_CURRENT_USER); subkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"; valname = "SendTo"; szFolderSendTo = winreg.getValueString(subkey, valname); subkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"; valname = "AppData"; szFolderAppData = winreg.getValueString(subkey, valname); // locate the Quick Launch folder szFolderQuickLaunch = szFolderAppData + "\\Microsoft\\Internet Explorer\\Quick Launch"; fFolderQuickLaunch = getFolder("file:///", szFolderQuickLaunch); folderQuickLaunchExists = File.isDirectory(fFolderQuickLaunch); if(!folderQuickLaunchExists) { subkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\GrpConv\\MapGroups"; valname = "Quick Launch"; szFolderQuickLaunch = winreg.getValueString(subkey, valname); folderQuickLaunchExists = File.isDirectory(fFolderPath); if(folderQuickLaunchExists) fFolderQuickLaunch = getFolder("file:///", szFolderQuickLaunch); } logComment("folderQuickLaunchExists: " + folderQuickLaunchExists); subkey = "SOFTWARE\\$CompanyName$\\$ProductName$\\$UserAgent$\\Main"; valname = "Program Folder Path"; fFolderPathStr = winreg.getValueString(subkey, valname); if((fFolderPathStr == "") || (fFolderPathStr == null)) { fTemp = szStartMenuPrograms + "\\" + scFolderName; fFolderPath = getFolder("file:///", fTemp); } else { /* convert the path string to a path folder object */ fFolderPath = getFolder("file:///", fFolderPathStr); } /* convert the path string to a path folder object */ fFolderDesktop = getFolder("file:///", szFolderDesktop); logComment("Folder StartMenuPrograms: " + szStartMenuPrograms); logComment("Folder StartMenu : " + szStartMenu); logComment("Folder FolderDesktop : " + szFolderDesktop); logComment("Folder FolderSendTo : " + szFolderSendTo); logComment("Folder FolderQuickLaunch: " + szFolderQuickLaunch); logComment("fileExe : " + fileExe); logComment("fFolderPath : " + fFolderPath); logComment("scExeDesc : " + scExeDesc); logComment("fProgram : " + fProgram); /* explicitly create the fFolderPath even though the windowsShortcut function creates the folder. * This is so that the folder creation gets logged for uninstall to remove it. */ if(!File.exists(fFolderPath)) File.dirCreate(fFolderPath); /* create the shortcuts */ File.windowsShortcut(fileExe, fFolderPath, scExeDesc, fProgram, scParam, fileExe, 0); // // Disabled for now because mail does not have a different shortcut icon from Mozilla // //// create shortcut in the Quick Launch folder //if(folderQuickLaunchExists) // File.windowsShortcut(fileExe, fFolderQuickLaunch, scExeDesc, fProgram, "", fileExe, 0); if(!restrictedAccess) { winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE); registerProgramFolderKey(winreg, fFolderPath); } winreg.setRootKey(winreg.HKEY_CURRENT_USER); registerProgramFolderKey(winreg, fFolderPath); } else { logComment("winreg is null"); } } function updateMapi() { var winreg; var szValue; var szMapiBackupDll; var szDefaultMailClient; var programMozMapi32File; var mainExePath; var sfpProgramMozMapi32File; var sfpMainExePath; var winsysMapi32File; var mapiProxyFile; winreg = getWinRegistry(); if(winreg != null) { mainExePath = getFolder("Program", "$MainExeFile$"); programMozMapi32File = getFolder("Program", "mozMapi32.dll"); winsysMapi32File = getFolder("Win System", "Mapi32.dll"); winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE); // If Mapi_backup_dll *and* the default var of // HKEY_LOCAL_MACHINE\Software\Clients\Mail is set, then install // mozMapi32.dll to the windows system dir as Mapi32.dll. szMapiBackupDll = winreg.getValueString("SOFTWARE\\Mozilla\\Desktop", "Mapi_backup_dll"); szDefaultMailClient = winreg.getValueString("SOFTWARE\\Clients\\Mail", ""); logComment("szMapiBackupDll: " + szMapiBackupDll); logComment("szDefaultMailClient: " + szDefaultMailClient); if((szMapiBackupDll != null) && (szMapiBackupDll != "") && (szDefaultMailClient != null) && (szDefaultMailClient == "$ProductName$")) { // We do not want to log this file to be uninstalled because the // uninstaller already has a special way to deal with restoring the // appropriate previous Mapi32.dll. addFile("", "$Version$", "bin/mozMapi32.dll", // file name in jar to extract getFolder("Win System"), // Where to put this file (Returned from getFolder) "Mapi32.dll", // new name when installed DO_NOT_UNINSTALL); } sfpProgramMozMapi32File = File.windowsGetShortName(programMozMapi32File); sfpMainExePath = File.windowsGetShortName(mainExePath); szValue = winreg.getValueString("SOFTWARE\\Clients\\Mail\\$ProductName$", "DLLPath"); if((szValue != null) && (szValue != "")) winreg.setValueString("SOFTWARE\\Clients\\Mail", "DLLPath", sfpProgramMozMapi32File); szValue = winreg.getValueString("SOFTWARE\\Clients\\Mail\\$ProductName$\\DefaultIcon", ""); if((szValue != null) && (szValue != "")) winreg.setValueString("SOFTWARE\\Clients\\Mail\\$ProductName$\\DefaultIcon", "", + sfpMainExePath + ",0"); szValue = winreg.getValueString("SOFTWARE\\Clients\\Mail\\$ProductName$\\protocols\\mailto\\shell\\open\\command", ""); if((szValue != null) && (szValue != "")) winreg.setValueString("SOFTWARE\\Clients\\Mail\\$ProductName$\\protocols\\mailto\\shell\\open\\command", "", sfpMainExePath + " \"%1\""); szValue = winreg.getValueString("SOFTWARE\\Clients\\Mail\\$ProductName$\\shell\\open\\command", ""); if((szValue != null) && (szValue != "")) winreg.setValueString("SOFTWARE\\Clients\\Mail\\$ProductName$\\shell\\open\\command", "", sfpMainExePath + " -mail"); // Register MapiProxy.dll mapiProxyFile = getFolder("Program", "MapiProxy.dll"); err = File.windowsRegisterServer(mapiProxyFile); logComment("File.windowsRegisterServer(" + mapiProxyFile + ") returned: " + err); } } function upgradeCleanup() { // Obsolete files from Netscape 6.0 and Netscape 6.01 that // need to be cleaned up. deleteThisFile("Components", "signed.dll"); } function updateWinIni() { var fWinIni = getWinProfile(getFolder("Windows"), "win.ini"); if(fWinIni != null) { fWinIni.writeString("Mail", "MAPI", "1"); fWinIni.writeString("Mail", "MAPIX", "1"); } } // main var srDest; var err; var fProgram; $Ren8dot3List$ srDest = $SpaceRequired$:bin; err = initInstall("Mozilla Mail", "Mail", "$Version$"); logComment("initInstall: " + err); fProgram = getFolder("Program"); logComment("fProgram: " + fProgram); if(verifyDiskSpace(fProgram, srDest)) { setPackageFolder(fProgram); $Ren8dot3Call$ upgradeCleanup(); err = addDirectory("", "$Version$", "bin", // dir name in jar to extract fProgram, // Where to put this file (Returned from GetFolder) "", // subdir name to create relative to fProgram true); // Force Flag logComment("addDirectory() returned: " + err); // check return value if( err == SUCCESS ) { createShortcuts(); updateWinIni(); // Disabling this call for now because Trunk does not have mozMapi32.dll yet. // updateMapi(); // we don't want to fail on errors for the above resetError(); // register chrome registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","messenger.jar"), "content/messenger/"); registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","messenger.jar"), "content/messenger-region/"); registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","messenger.jar"), "content/messenger-smime/"); registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","messenger.jar"), "content/messenger-mapi/"); // log comments for uninstalling the registry keys created by mail for setting // itself up in WinXP's Start menu logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\$ProductName$ []"); logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\$ProductName$ []"); logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\$ProductName$ [DLLPath]"); logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\$ProductName$\\DefaultIcon []"); logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\$ProductName$\\DefaultIcon []"); logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\$ProductName$\\protocols []"); logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\$ProductName$\\protocols\\mailto []"); logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\$ProductName$\\protocols\\mailto []"); logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\$ProductName$\\protocols\\mailto\\shell []"); logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\$ProductName$\\protocols\\mailto\\shell\\open []"); logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\$ProductName$\\protocols\\mailto\\shell\\open\\command []"); logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\$ProductName$\\protocols\\mailto\\shell\\open\\command []"); logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\$ProductName$\\shell []"); logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\$ProductName$\\shell\\open []"); logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\$ProductName$\\shell\\open\\command []"); logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\$ProductName$\\shell\\open\\command []"); // check return value err = getLastError(); if(err == SUCCESS) { err = performInstall(); logComment("performInstall() returned: " + err); } else cancelInstall(err); } else cancelInstall(err); } else cancelInstall(INSUFFICIENT_DISK_SPACE); // end main