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