home *** CD-ROM | disk | FTP | other *** search
/ PC Extra 07 & 08 / pca1507.iso / tools / mozilla / NL / xpcom.xpi / install.js next >
Encoding:
JavaScript  |  2003-04-25  |  7.8 KB  |  274 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 if (!platformStr.search(/^OS\/2/))
  75.       platformNode = 'win';
  76.     else
  77.       platformNode = 'unix';
  78.   }
  79.   else
  80.   {
  81.     var fOSMac  = getFolder("Mac System");
  82.     var fOSWin  = getFolder("Win System");
  83.  
  84.     logComment("fOSMac: "  + fOSMac);
  85.     logComment("fOSWin: "  + fOSWin);
  86.  
  87.     if(fOSMac != null)
  88.       platformNode = 'mac';
  89.     else if(fOSWin != null)
  90.       platformNode = 'win';
  91.     else
  92.       platformNode = 'unix';
  93.   }
  94.  
  95.   return platformNode;
  96. }
  97.  
  98. function registerMainKeys(winreg)
  99. {
  100.   var subkey;  //the name of the subkey you are poking around in
  101.   var err;
  102.  
  103.   winreg.createKey("SOFTWARE\\mozilla.org","");
  104.  
  105.   subkey  = "SOFTWARE\\mozilla.org\\Mozilla";
  106.   winreg.createKey(subkey,"");
  107.   err     = winreg.setValueString(subkey, "CurrentVersion", "1.3.1 (en)");
  108.  
  109.   winreg.createKey("SOFTWARE\\mozilla.org\\Mozilla\\1.3.1 (en)","");
  110.  
  111.   subkey  = "SOFTWARE\\mozilla.org\\Mozilla\\1.3.1 (en)\\Main";
  112.   winreg.createKey(subkey,"");
  113.   err     = winreg.setValueString(subkey, "Install Directory", fProgram);
  114.  
  115.   subkey  = "SOFTWARE\\mozilla.org\\Mozilla\\1.3.1 (en)\\Uninstall";
  116.   winreg.createKey(subkey,"");
  117.   err     = winreg.setValueString(subkey, "Uninstall Log Folder", szUninstall);
  118.   err     = winreg.setValueString(subkey, "Description", "Mozilla (1.3.1)");
  119. }
  120.  
  121. function updateWinReg()
  122. {
  123.   //Notes:
  124.   // can't use a double backslash before subkey - Windows already puts it in.
  125.   // subkeys have to exist before values can be put in.
  126.   var winreg = getWinRegistry();
  127.   var subkey;  //the name of the subkey you are poking around in
  128.   var restrictedAccess;
  129.   var ikwDefined;
  130.  
  131.   if(winreg != null) 
  132.   {
  133.     /* This will check to see if the user has restricted access or not.
  134.      * It checks to see if HKEY_LOCALMACHINE\SOFTWARE is writable.  If
  135.      * it is, then access is not restricted.  This is only used to
  136.      * determine which Desktop, Programs, and Start Menu folders
  137.      * are to used: common or per user
  138.      */
  139.     restrictedAccess = false;
  140.     ikwDefined = typeof(winreg.isKeyWritable);
  141.     logComment("winreg.isKeyWritable(): " + ikwDefined);
  142.     if(ikwDefined == "function")
  143.     {
  144.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  145.       if(!winreg.isKeyWritable("SOFTWARE"))
  146.         restrictedAccess = true;
  147.     }
  148.  
  149.     logComment("restrictedAccess value: " + restrictedAccess);
  150.     if(!restrictedAccess)
  151.     {
  152.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  153.       registerMainKeys(winreg);
  154.     }
  155.  
  156.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  157.     registerMainKeys(winreg);
  158.   }
  159. }
  160.  
  161. function upgradeCleanup()
  162. {
  163.   deleteThisFile("Program",    "zlib.dll");
  164.   deleteThisFile("Program",    "component.reg");
  165.   deleteThisFile("Components", "compreg.dat");
  166.   deleteThisFile("Components", "xpti.dat");
  167.   deleteThisFile("Components", "xptitemp.dat");
  168. }
  169.  
  170. // main
  171. var srDest;
  172. var err;
  173. var szUninstall;
  174. var fProgram;
  175. var fWindowsSystem;
  176. var fileComponentReg;
  177. var fileComponentRegStr;
  178. var fileMsvcrt;
  179. var fileMsvcirt;
  180.  
  181. srDest = 1505;
  182. err    = initInstall("Mozilla XPCOM", "XPCOM", "1.3.1.2003042512"); 
  183. logComment("initInstall: " + err);
  184.  
  185. fProgram  = getFolder("Program");
  186. fWindowsSystem = getFolder("Win System");
  187. logComment("fProgram: " + fProgram);
  188.  
  189. // build the uninstall folder path
  190. szUninstall = fProgram + "Uninstall";
  191.  
  192. // Log component.reg file so it can be deleted by the uninstaller.
  193. // These two files are created after installation is done, thus
  194. // are normally not logged for uninstall.
  195. logComment("Installing: " + fProgram + "component.reg");
  196.  
  197. if(verifyDiskSpace(fProgram, srDest))
  198. {
  199.   setPackageFolder(fProgram);
  200.  
  201.   upgradeCleanup();
  202.   err = addDirectory("",
  203.                      "1.3.1.2003042512",
  204.                      "bin",              // dir name in jar to extract 
  205.                      fProgram,           // Where to put this file (Returned from GetFolder) 
  206.                      "",                 // subdir name to create relative to fProgram
  207.                      true);              // Force Flag 
  208.   logComment("addDirectory() of Program returned: " + err);
  209.  
  210.   if( err == SUCCESS )
  211.   {
  212.     // install msvcrt.dll *only* if it does not exist
  213.     // we don't care if addFile() fails (if the file does not exist in the archive)
  214.     // bacause it will still install
  215.     fileMsvcrt = getFolder(fWindowsSystem, "msvcrt.dll");
  216.     rv         = File.exists(fileMsvcrt);
  217.     logComment("fileExists() returned: " + rv);
  218.     if(rv == false)
  219.     {
  220.       logComment("File not found: " + fileMsvcrt);
  221.       addFile("/Microsoft/Shared/msvcrt.dll",
  222.               "1.3.1.2003042512",
  223.               "msvcrt.dll",         // dir name in jar to extract 
  224.               fWindowsSystem,       // Where to put this file (Returned from getFolder) 
  225.               "",                   // subdir name to create relative to fProgram
  226.               WIN_SHARED_FILE);
  227.       logComment("addFile() of msvcrt.dll returned: " + err);
  228.     }
  229.     else
  230.     {
  231.       logComment("File found: " + fileMsvcrt);
  232.     }
  233.  
  234.     // install msvcirt.dll *only* if it does not exist
  235.     // we don't care if addFile() fails (if the file does not exist in the archive)
  236.     // bacause it will still install
  237.     fileMsvcirt = getFolder(fWindowsSystem, "msvcirt.dll");
  238.     rv          = File.exists(fileMsvcirt);
  239.     logComment("fileExists() returned: " + rv);
  240.     if(rv == false)
  241.     {
  242.       logComment("File not found: " + fileMsvcirt);
  243.       addFile("/Microsoft/Shared/msvcirt.dll",
  244.               "1.3.1.2003042512",
  245.               "msvcirt.dll",        // dir name in jar to extract 
  246.               fWindowsSystem,       // Where to put this file (Returned from getFolder) 
  247.               "",                   // subdir name to create relative to fProgram
  248.               WIN_SHARED_FILE);
  249.       logComment("addFile() of msvcirt.dll returned: " + err);
  250.     }
  251.     else
  252.     {
  253.       logComment("File found: " + fileMsvcirt);
  254.     }
  255.   }
  256.  
  257.   // check return value
  258.   if( err == SUCCESS )
  259.   {
  260.     updateWinReg();
  261.  
  262.     err = performInstall(); 
  263.     logComment("performInstall() returned: " + err);
  264.   }
  265.   else
  266.     cancelInstall(err);
  267. }
  268. else
  269.   cancelInstall(INSUFFICIENT_DISK_SPACE);
  270.  
  271.  
  272. // end main
  273.  
  274.