home *** CD-ROM | disk | FTP | other *** search
/ InterCD 2001 November / november_2001.iso / Browsers / Netscape 6.1 / xpcom.xpi / install.js next >
Encoding:
JavaScript  |  2001-07-27  |  10.4 KB  |  361 lines

  1. // this function verifies disk space in kilobytes
  2. function verifyDiskSpace(dirPath, spaceRequired)
  3. {
  4.   var spaceAvailable;
  5.  
  6.   // Get the available disk space on the given path
  7.   spaceAvailable = fileGetDiskSpaceAvailable(dirPath);
  8.  
  9.   // Convert the available disk space into kilobytes
  10.   spaceAvailable = parseInt(spaceAvailable / 1024);
  11.  
  12.   // do the verification
  13.   if(spaceAvailable < spaceRequired)
  14.   {
  15.     logComment("Insufficient disk space: " + dirPath);
  16.     logComment("  required : " + spaceRequired + " K");
  17.     logComment("  available: " + spaceAvailable + " K");
  18.     return(false);
  19.   }
  20.  
  21.   return(true);
  22. }
  23.  
  24. // this function deletes a file if it exists
  25. function deleteThisFile(dirKey, file)
  26. {
  27.   var fFileToDelete;
  28.  
  29.   fFileToDelete = getFolder(dirKey, file);
  30.   logComment(file + " file: " + fFileToDelete);
  31.   if(File.exists(fFileToDelete))
  32.   {
  33.     fileDelete(fFileToDelete);
  34.     return(true);
  35.   }
  36.   else
  37.     return(false);
  38. }
  39.  
  40. // this function deletes a folder (recursively) if it exists
  41. function deleteThisFolder(dirKey, folder)
  42. {
  43.   var fToDelete;
  44.  
  45.   fToDelete = getFolder(dirKey, folder);
  46.   logComment(folder + " folder: " + fToDelete);
  47.   if(File.exists(fToDelete))
  48.   {
  49.     File.dirRemove(fToDelete, true);
  50.     return(true);
  51.   }
  52.   else
  53.     return(false);
  54. }
  55.  
  56. // OS type detection
  57. // which platform?
  58. function getPlatform()
  59. {
  60.   var platformStr;
  61.   var platformNode;
  62.  
  63.   if('platform' in Install)
  64.   {
  65.     platformStr = new String(Install.platform);
  66.  
  67.     if (!platformStr.search(/^Macintosh/))
  68.       platformNode = 'mac';
  69.     else if (!platformStr.search(/^Win/))
  70.       platformNode = 'win';
  71.     else
  72.       platformNode = 'unix';
  73.   }
  74.   else
  75.   {
  76.     var fOSMac  = getFolder("Mac System");
  77.     var fOSWin  = getFolder("Win System");
  78.  
  79.     logComment("fOSMac: "  + fOSMac);
  80.     logComment("fOSWin: "  + fOSWin);
  81.  
  82.     if(fOSMac != null)
  83.       platformNode = 'mac';
  84.     else if(fOSWin != null)
  85.       platformNode = 'win';
  86.     else
  87.       platformNode = 'unix';
  88.   }
  89.  
  90.   return platformNode;
  91. }
  92.  
  93. function updateWinReg4Ren8dot3() 
  94. {
  95.   var fProgram      = getFolder("Program");
  96.   var fTemp         = getFolder("Temporary");
  97.  
  98.   //Notes:
  99.   // can't use a double backslash before subkey - Windows already puts it in.            
  100.   // subkeys have to exist before values can be put in.
  101.   var subkey;  // the name of the subkey you are poking around in
  102.   var valname; // the name of the value you want to look at
  103.   var value;   // the data in the value you want to look at.
  104.   var winreg = getWinRegistry() ;
  105.  
  106.   if(winreg != null) 
  107.   {
  108.     // Here, we get the current version.
  109.     winreg.setRootKey(winreg.HKEY_CURRENT_USER) ;  // CURRENT_USER
  110.     subkey  = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce" ;
  111.  
  112.     winreg.createKey(subkey,"");
  113.     valname = "ren8dot3";
  114.     value   = fProgram + "ren8dot3.exe " + fTemp + "ren8dot3.ini";
  115.     err     = winreg.setValueString(subkey, valname, value);
  116.   }
  117. }
  118.  
  119. function prepareRen8dot3(listLongFilePaths)
  120. {
  121.   var fTemp                 = getFolder("Temporary");
  122.   var fProgram              = getFolder("Program");
  123.   var fRen8dot3Ini          = getWinProfile(fTemp, "ren8dot3.ini");
  124.   var bIniCreated           = false;
  125.   var fLongFilePath;
  126.   var sShortFilePath;
  127.  
  128.   if(fRen8dot3Ini != null)
  129.   {
  130.     for(i = 0; i < listLongFilePaths.length; i++)
  131.     {
  132.       fLongFilePath   = getFolder(fProgram, listLongFilePaths[i]);
  133.       sShortFilePath  = File.windowsGetShortName(fLongFilePath);
  134.       if(sShortFilePath)
  135.       {
  136.         fRen8dot3Ini.writeString("rename", sShortFilePath, fLongFilePath);
  137.         bIniCreated = true;
  138.       }
  139.     }
  140.  
  141.     if(bIniCreated)
  142.       updateWinReg4Ren8dot3() ;
  143.   }
  144.  
  145.   return(0);
  146. }
  147.  
  148. function registerMainKeys(winreg)
  149. {
  150.   var subkey;  //the name of the subkey you are poking around in
  151.   var valname; //the name of the value you want to look at
  152.   var value;   //the data in the value you want to look at.
  153.   var err;
  154.  
  155.   subkey  = "SOFTWARE\\Netscape";
  156.   winreg.createKey(subkey,"");
  157.  
  158.   subkey  = "SOFTWARE\\Netscape\\Netscape 6";
  159.   winreg.createKey(subkey,"");
  160.  
  161.   valname = "CurrentVersion";
  162.   value   = "6.1 (en)";
  163.   err     = winreg.setValueString(subkey, valname, value);
  164.  
  165.   subkey  = "SOFTWARE\\Netscape\\Netscape 6\\6.1 (en)";
  166.   winreg.createKey(subkey,"");
  167.  
  168.   subkey  = "SOFTWARE\\Netscape\\Netscape 6\\6.1 (en)\\Main";
  169.   winreg.createKey(subkey,"");
  170.  
  171.   valname = "Install Directory";
  172.   value   = fCommunicator;
  173.   err     = winreg.setValueString(subkey, valname, value);
  174.  
  175.   subkey  = "SOFTWARE\\Netscape\\Netscape 6\\6.1 (en)\\Uninstall";
  176.   winreg.createKey(subkey,"");
  177.  
  178.   valname = "Uninstall Log Folder";
  179.   value   = szUninstall;
  180.   err     = winreg.setValueString(subkey, valname, value);
  181.  
  182.   valname = "Description";
  183.   value   = "Netscape 6 (6.1)";
  184.   err     = winreg.setValueString(subkey, valname, value);
  185. }
  186.  
  187. function updateWinReg()
  188. {
  189.   //Notes:
  190.   // can't use a double backslash before subkey - Windows already puts it in.
  191.   // subkeys have to exist before values can be put in.
  192.   var winreg = getWinRegistry();
  193.   var subkey;  //the name of the subkey you are poking around in
  194.   var valname; //the name of the value you want to look at
  195.   var value;   //the data in the value you want to look at.
  196.   var restrictedAccess;
  197.   var ikwDefined;
  198.  
  199.   if(winreg != null) 
  200.   {
  201.     /* This will check to see if the user has restricted access or not.
  202.      * It checks to see if HKEY_LOCALMACHINE\SOFTWARE is writable.  If
  203.      * it is, then access is not restricted.  This is only used to
  204.      * determine which Desktop, Programs, and Start Menu folders
  205.      * are to used: common or per user
  206.      */
  207.     restrictedAccess = false;
  208.     ikwDefined = typeof(winreg.isKeyWritable);
  209.     logComment("winreg.isKeyWritable(): " + ikwDefined);
  210.     if(ikwDefined == "function")
  211.     {
  212.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  213.       if(!winreg.isKeyWritable("SOFTWARE"))
  214.         restrictedAccess = true;
  215.     }
  216.  
  217.     logComment("restrictedAccess value: " + restrictedAccess);
  218.     if(!restrictedAccess)
  219.     {
  220.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  221.       registerMainKeys(winreg);
  222.     }
  223.  
  224.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  225.     registerMainKeys(winreg);
  226.   }
  227. }
  228.  
  229. function upgradeCleanup()
  230. {
  231.   deleteThisFile("Program",    "component.reg");
  232.   deleteThisFile("Components", "xpti.dat");
  233.   deleteThisFile("Components", "xptitemp.dat");
  234. }
  235.  
  236. // main
  237. var srDest;
  238. var err;
  239. var szUninstall;
  240. var fCommunicator;
  241. var fWindowsSystem;
  242. var fileTemp;
  243. var fileComponentReg;
  244. var fileComponentRegStr;
  245. var fileMsvcrt;
  246. var fileMsvcirt;
  247. var fileMsvcp60;
  248.  
  249.  
  250. srDest = 1473;
  251. err    = initInstall("Netscape XPCom", "XPCom", "6.10.0.2001072700"); 
  252. logComment("initInstall: " + err);
  253.  
  254. fCommunicator  = getFolder("Program");
  255. fWindowsSystem = getFolder("Win System");
  256. logComment("fCommunicator: " + fCommunicator);
  257.  
  258. // build the uninstall folder path
  259. szUninstall = fCommunicator + "Uninstall";
  260.  
  261. // Log component.reg and xpcom.log files so it can be deleted by
  262. // the uninstaller.
  263. // These two files are created after installation is done, thus
  264. // are normally not logged for uninstall.
  265. logComment("Installing: " + fCommunicator + "component.reg");
  266.  
  267. if(verifyDiskSpace(fCommunicator, srDest))
  268. {
  269.   setPackageFolder(fCommunicator);
  270.  
  271.  
  272.   err = addDirectory("",
  273.                      "6.10.0.2001072700",
  274.                      "bin",              // dir name in jar to extract 
  275.                      fCommunicator,      // Where to put this file (Returned from getFolder) 
  276.                      "",                 // subdir name to create relative to fCommunicator
  277.                      true);              // Force Flag 
  278.   logComment("addDirectory() of Program returned: " + err);
  279.  
  280.   if(err == SUCCESS)
  281.   {
  282.     fileTemp   = fWindowsSystem + "msvcrt.dll";
  283.     fileMsvcrt = getFolder("file:///", fileTemp);
  284.     rv         = File.exists(fileMsvcrt);
  285.     logComment("fileExists() returned: " + rv);
  286.     if(rv == false)
  287.     {
  288.       logComment("File not found: " + fileMsvcrt);
  289.       err = addFile("/Microsoft/Shared",
  290.                     "6.10.0.2001072700",
  291.                     "msvcrt.dll",         // dir name in jar to extract 
  292.                     fWindowsSystem,       // Where to put this file (Returned from getFolder) 
  293.                     "",                   // subdir name to create relative to fCommunicator
  294.                     WIN_SHARED_FILE);
  295.       logComment("addFile() of msvcrt.dll returned: " + err);
  296.     }
  297.     else
  298.     {
  299.       logComment("File found: " + fileMsvcrt);
  300.     }
  301.  
  302.     fileTemp    = fWindowsSystem + "msvcirt.dll";
  303.     fileMsvcirt = getFolder("file:///", fileTemp);
  304.     rv          = File.exists(fileMsvcirt);
  305.     logComment("fileExists() returned: " + rv);
  306.     if(rv == false)
  307.     {
  308.       logComment("File not found: " + fileMsvcirt);
  309.       err = addFile("/Microsoft/Shared",
  310.                     "6.10.0.2001072700",
  311.                     "msvcirt.dll",        // dir name in jar to extract 
  312.                     fWindowsSystem,       // Where to put this file (Returned from getFolder) 
  313.                     "",                   // subdir name to create relative to fCommunicator
  314.                     WIN_SHARED_FILE);
  315.       logComment("addFile() of msvcirt.dll returned: " + err);
  316.     }
  317.     else
  318.     {
  319.       logComment("File found: " + fileMsvcirt);
  320.     }
  321.  
  322.     fileTemp    = fWindowsSystem + "msvcp60.dll";
  323.     fileMsvcp60 = getFolder("file:///", fileTemp);
  324.     rv          = File.exists(fileMsvcp60);
  325.     logComment("fileExists() returned: " + rv);
  326.     if(rv == false)
  327.     {
  328.       logComment("File not found: " + fileMsvcp60);
  329.       err = addFile("/Microsoft/Shared",
  330.                     "6.10.0.2001072700",
  331.                     "msvcp60.dll",        // dir name in jar to extract 
  332.                     fWindowsSystem,       // Where to put this file (Returned from getFolder) 
  333.                     "",                   // subdir name to create relative to fCommunicator
  334.                     WIN_SHARED_FILE);
  335.       logComment("addFile() of msvcp60.dll returned: " + err);
  336.     }
  337.     else
  338.     {
  339.       logComment("File found: " + fileMsvcp60);
  340.     }
  341.  
  342.     if(!err)
  343.     {
  344.       updateWinReg();
  345.       upgradeCleanup();
  346.  
  347.       err = performInstall(); 
  348.       logComment("performInstall() returned: " + err);
  349.     }
  350.     else
  351.       cancelInstall(err);
  352.   }
  353.   else
  354.     cancelInstall(err);
  355. }
  356. else
  357.   cancelInstall(INSUFFICIENT_DISK_SPACE);
  358.  
  359. // end main
  360.  
  361.