home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2006 February / maximum-cd-2006-02.iso / Software / Apps / firefox_setup_1.5.exe / en-US.xpi / install.js
Encoding:
JavaScript  |  2005-11-11  |  19.2 KB  |  530 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. // main
  99. var srDest;
  100. var err;
  101. var fProgram;
  102. var platformNode;
  103. var searchPlugins = "searchplugins";
  104. var restrictedAccess;
  105.  
  106. function registerProgramFolderKey(winreg, fFolderPath)
  107. {
  108.   var subkey;
  109.   var err;
  110.   var szCurrentMozillaVersion;
  111.  
  112.   /* set the Program Folder Path in the Mozilla key in the Windows Registry */
  113.   winreg.createKey("SOFTWARE\\Mozilla","");
  114.  
  115.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox";
  116.   winreg.createKey(subkey,"");
  117.   err     = winreg.setValueString(subkey, "CurrentVersion", "1.5 (en-US)");
  118.  
  119.   subkey  = "SOFTWARE\\Mozilla\\Mozilla";
  120.   szCurrentMozillaVersion = winreg.getValueString(subkey, "CurrentVersion");
  121.   logComment("szCurrentMozillaVersion: " + szCurrentMozillaVersion);
  122.  
  123.   if((szCurrentMozillaVersion == "") || (szCurrentMozillaVersion == null))
  124.   {
  125.     // A Mozilla\CurrentVersion key must be set so that Java can work. 
  126.     // (bug 229627)
  127.     subkey  = "SOFTWARE\\Mozilla\\Mozilla";
  128.     winreg.createKey(subkey,"");
  129.     err     = winreg.setValueString(subkey, "CurrentVersion", "1.7.5");
  130.   }
  131.  
  132.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.5 (en-US)";
  133.   winreg.createKey(subkey,"");
  134.  
  135.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.5 (en-US)\\Main";
  136.   winreg.createKey(subkey,"");
  137.   err     = winreg.setValueString(subkey, "Program Folder Path", fFolderPath);
  138. }
  139.  
  140. function createShortcuts() 
  141. {
  142.   var subkey;
  143.   var valname;
  144.   var szStartMenuPrograms;
  145.   var szStartMenu;
  146.   var szFolderDesktop;
  147.   var szFolderQuickLaunch;
  148.   var szFolderAppData;
  149.   var winreg;
  150.   var fTemp;
  151.   var fProgram;
  152.   var fDefShortcuts;
  153.   var fileExe;
  154.   var scExeDesc;
  155.   var scFolderName;
  156.   var fFolderDesktop;
  157.   var fFolderPrograms;
  158.   var fFolderProgramsStr;
  159.   var fFolderQuickLaunch;
  160.   var is_winnt;
  161.   var szCurrentVersion;
  162.   var folderQuickLaunchExists;
  163.  
  164.   winreg               = getWinRegistry();
  165.   fProgram             = getFolder("Program");
  166.   fDefShortcuts        = getFolder("Program","defaults/shortcuts");
  167.   fTemp                = fProgram + "firefox.exe";
  168.   fileExe              = getFolder("file:///", fTemp);
  169.   scExeDesc            = "Mozilla Firefox";
  170.   scFolderName         = "Mozilla Firefox";
  171.   scSafeModeDesc       = "Mozilla Firefox (Safe Mode)";
  172.   scSafeModeParam      = "-safe-mode";
  173.  
  174.   if (winreg) {
  175.     // determine if the script is running under NT or not
  176.     winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  177.     subkey              = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
  178.     szCurrentVersion    = winreg.getValueString(subkey, "CurrentVersion");
  179.     logComment("szCurrentVersion: " + szCurrentVersion);
  180.     is_winnt = szCurrentVersion != "";
  181.     logComment("is_winnt value: " + is_winnt);
  182.  
  183.     // Locate the various folders we're about to install shortcuts into.     
  184.     if(!is_winnt || restrictedAccess) {
  185.       winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  186.       subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  187.       szStartMenuPrograms = winreg.getValueString(subkey, "Programs");
  188.       szStartMenu         = winreg.getValueString(subkey, "Start Menu");
  189.       szFolderDesktop     = winreg.getValueString(subkey, "Desktop");
  190.       }
  191.     else {
  192.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  193.       subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  194.       szStartMenuPrograms = winreg.getValueString(subkey, "Common Programs");
  195.       szStartMenu         = winreg.getValueString(subkey, "Common Start Menu");
  196.       szFolderDesktop     = winreg.getValueString(subkey, "Common Desktop");
  197.     }
  198.  
  199.     // Locate the Start Menu Programs Folder
  200.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  201.     subkey              = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.5 (en-US)\\Main";
  202.     fFolderProgramsStr  = winreg.getValueString(subkey, "Program Folder Path");
  203.     fFolderPrograms = getFolder("file:///", fFolderProgramsStr || szStartMenuPrograms);
  204.  
  205.     // Locate the Desktop Folder
  206.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  207.     fFolderDesktop = getFolder("file:///", szFolderDesktop);
  208.  
  209.     // Locate the Quick Launch folder
  210.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  211.     subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  212.     szFolderAppData     = winreg.getValueString(subkey, "AppData");
  213.     szFolderQuickLaunch = szFolderAppData + "\\Microsoft\\Internet Explorer\\Quick Launch";
  214.     fFolderQuickLaunch  = getFolder("file:///", szFolderQuickLaunch);
  215.     folderQuickLaunchExists = File.isDirectory(fFolderQuickLaunch);
  216.     if(!folderQuickLaunchExists) {
  217.       subkey                  = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\GrpConv\\MapGroups";
  218.       szFolderQuickLaunch     = winreg.getValueString(subkey, "Quick Launch");
  219.       folderQuickLaunchExists = File.isDirectory(fFolderPrograms);
  220.       if(folderQuickLaunchExists)
  221.         fFolderQuickLaunch = getFolder("file:///", szFolderQuickLaunch);
  222.     }
  223.     logComment("folderQuickLaunchExists: " + folderQuickLaunchExists);
  224.  
  225.     logComment("Folder StartMenuPrograms: " + szStartMenuPrograms);
  226.     logComment("Folder StartMenu        : " + szStartMenu);
  227.     logComment("Folder FolderDesktop    : " + szFolderDesktop);
  228.     logComment("Folder FolderQuickLaunch: " + szFolderQuickLaunch);
  229.     logComment("fileExe                 : " + fileExe);
  230.     logComment("fFolderPrograms         : " + fFolderPrograms);
  231.     logComment("scExeDesc               : " + scExeDesc);
  232.     logComment("fProgram                : " + fProgram);
  233.  
  234.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  235.     subkey              = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.5 (en-US)\\Main";
  236.  
  237.     // Explicitly create the fFolderPrograms even though the windowsShortcut 
  238.     // function creates the folder. This is so that the folder creation gets 
  239.     // logged for uninstall to remove it.
  240.     
  241.     // Only create the Start Menu folder if the user selected start menu icons
  242.     if (winreg.getValueNumber(subkey, "Create Start Menu Shortcut") != 0 && !File.exists(fFolderPrograms))
  243.       File.dirCreate(fFolderPrograms);
  244.     
  245.     // Always create default shortcuts folder
  246.     if (!File.exists(fDefShortcuts))
  247.       File.dirCreate(fDefShortcuts);
  248.  
  249.     // Create the Shortcuts
  250.     if (winreg.getValueNumber(subkey, "Create Desktop Shortcut") != 0)
  251.       File.windowsShortcut(fileExe, fFolderDesktop, scExeDesc, fProgram, "", fileExe, 0);
  252.     if (winreg.getValueNumber(subkey, "Create Start Menu Shortcut") != 0) {
  253.       File.windowsShortcut(fileExe, fFolderPrograms, scExeDesc, fProgram, "", fileExe, 0);
  254.       File.windowsShortcut(fileExe, fFolderPrograms,  scSafeModeDesc, fProgram, scSafeModeParam,  fileExe, 0);
  255.     }
  256.     if (winreg.getValueNumber(subkey, "Create Quick Launch Shortcut") != 0 && folderQuickLaunchExists)
  257.       File.windowsShortcut(fileExe, fFolderQuickLaunch, scExeDesc, fProgram,  "", fileExe, 0);
  258.     // Always create the default shortcuts. 
  259.     File.windowsShortcut(fileExe, fDefShortcuts,    scExeDesc,      fProgram, "",               fileExe, 0);
  260.     File.windowsShortcut(fileExe, fDefShortcuts,    scSafeModeDesc, fProgram, scSafeModeParam,  fileExe, 0);
  261.  
  262.     if(!restrictedAccess) {
  263.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  264.       registerProgramFolderKey(winreg, fFolderPrograms);
  265.  
  266.       // This is so that Windows Media Player works with us      
  267.       var subkey = "SOFTWARE\\Microsoft\\MediaPlayer\\ShimInclusionList\\firefox.exe";
  268.       winreg.createKey(subkey, "");
  269.     }
  270.  
  271.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  272.     registerProgramFolderKey(winreg, fFolderPrograms);
  273.   }
  274.   else
  275.     logComment("winreg is null");
  276. }
  277.  
  278. function IsWinnt()
  279. {
  280.   /* Determines if the script is running under NT or not.
  281.    *
  282.    */
  283.   var winreg = getWinRegistry();
  284.   var subkey;
  285.   var szCurrentVersion;
  286.  
  287.   winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  288.   subkey              = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
  289.   szCurrentVersion    = winreg.getValueString(subkey, "CurrentVersion");
  290.   logComment("szCurrentVersion: " + szCurrentVersion);
  291.   
  292.   return szCurrentVersion != "";
  293. }
  294.  
  295. function registerMainKeys(winreg)
  296. {
  297.   var subkey;  //the name of the subkey you are poking around in
  298.   var data;
  299.   var err;
  300.  
  301.   winreg.createKey("SOFTWARE\\Mozilla","");
  302.  
  303.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox";
  304.   winreg.createKey(subkey,"");
  305.   err     = winreg.setValueString(subkey, "CurrentVersion", "1.5 (en-US)");
  306.  
  307.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.5 (en-US)";
  308.   winreg.createKey(subkey,"");
  309.  
  310.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.5 (en-US)\\Main";
  311.   winreg.createKey(subkey,"");
  312.  
  313.   err     = winreg.setValueString(subkey, "Install Directory", fProgram);
  314.  
  315.   // The following keys are required to be created to supply information
  316.   // about the location of the Gecko Embedded Client to 3rd party apps.
  317.   // "SOFTWARE\\Mozilla" must not be localized!
  318.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox 1.5";
  319.   winreg.createKey(subkey,"");
  320.   err     = winreg.setValueString(subkey, "GeckoVer", "1.7.5");
  321.  
  322.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox 1.5\\Extensions";
  323.   winreg.createKey(subkey,"");
  324.   err     = winreg.setValueString(subkey, "Components", fProgram + "Components");
  325.   err     = winreg.setValueString(subkey, "Plugins", fProgram + "Plugins");
  326.  
  327.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox 1.5\\bin";
  328.   winreg.createKey(subkey,"");
  329.   err     = winreg.setValueString(subkey, "PathToExe", fProgram + "firefox.exe");
  330.  
  331.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.5 (en-US)\\Main";
  332.   err     = winreg.setValueString(subkey, "PathToExe", fProgram + "firefox.exe");
  333.  
  334.   // Register as a windows XP internet browser
  335.   if( IsWinnt() )
  336.   {
  337.     subkey = "Software\\Clients\\StartMenuInternet\\firefox.exe";
  338.     winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  339.  
  340.     winreg.createKey(subkey, "");
  341.     winreg.createKey(subkey + "\\DefaultIcon", "");
  342.     winreg.createKey(subkey + "\\shell", "");
  343.     winreg.createKey(subkey + "\\shell\\open", "");
  344.     winreg.createKey(subkey + "\\shell\\open\\command", "");
  345.     winreg.createKey(subkey + "\\InstallInfo", "");
  346.     winreg.setValueString(subkey, "", "Mozilla Firefox");
  347.  
  348.     // path does not need to be quoted per MS doc
  349.     data = fProgram + "firefox.exe,0";
  350.     winreg.setValueString(subkey + "\\DefaultIcon", "", data);
  351.  
  352.     data = "\"" + fProgram + "firefox.exe\"";
  353.     winreg.setValueString(subkey + "\\shell\\open\\command", "", data);
  354.  
  355.     data = "\"" + fProgram + "uninstall\\UninstallFirefox.exe\" /ua \"1.5 (en-US)\" /hs browser";
  356.     winreg.setValueString(subkey + "\\InstallInfo", "HideIconsCommand", data);
  357.  
  358.     winreg.setValueNumber(subkey + "\\InstallInfo", "IconsVisible", 1);
  359.  
  360.     data = "\"" + fProgram + "firefox.exe\" -silent -nosplash -setDefaultBrowser ";
  361.     winreg.setValueString(subkey + "\\InstallInfo", "ReinstallCommand", data);
  362.  
  363.     data = "\"" + fProgram + "uninstall\\UninstallFirefox.exe\" /ua \"1.5 (en-US)\" /ss browser";
  364.     winreg.setValueString(subkey + "\\InstallInfo", "ShowIconsCommand", data);
  365.   }
  366. }
  367.  
  368. function updateWinReg()
  369. {
  370.   //Notes:
  371.   // can't use a double backslash before subkey - Windows already puts it in.
  372.   // subkeys have to exist before values can be put in.
  373.   var winreg = getWinRegistry();
  374.   var subkey;  //the name of the subkey you are poking around in
  375.   var err;
  376.   var ikwDefined;
  377.  
  378.   if(winreg != null) 
  379.   {
  380.     /* This will check to see if the user has restricted access or not.
  381.      * It checks to see if HKEY_LOCALMACHINE\SOFTWARE is writable.  If
  382.      * it is, then access is not restricted.  This is only used to
  383.      * determine which Desktop, Programs, and Start Menu folders
  384.      * are to used: common or per user
  385.      */
  386.     restrictedAccess = false;
  387.     ikwDefined = typeof(winreg.isKeyWritable);
  388.     logComment("winreg.isKeyWritable(): " + ikwDefined);
  389.     if(ikwDefined == "function")
  390.     {
  391.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  392.       if(!winreg.isKeyWritable("SOFTWARE"))
  393.         restrictedAccess = true;
  394.     }
  395.  
  396.     logComment("restrictedAccess value: " + restrictedAccess);
  397.     if(!restrictedAccess)
  398.     {
  399.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  400.       registerMainKeys(winreg);
  401.  
  402.       // set the App Paths key here
  403.       subkey  = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\firefox.exe";
  404.       winreg.createKey(subkey,"");
  405.       err     = winreg.setValueString(subkey, "", fProgram + "firefox.exe");
  406.       err     = winreg.setValueString(subkey, "Path", fProgram);
  407.  
  408.       // XPInstall content type mappings. 
  409.       subkey = "SOFTWARE\\Classes\\MIME\\Database\\Content Type\\application/x-xpinstall;app=firefox"
  410.       winreg.createKey(subkey, "");
  411.       winreg.setValueString(subkey, "Extension", ".xpi");
  412.     }
  413.  
  414.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  415.     registerMainKeys(winreg);
  416.   }
  417.  
  418.   // Now clean up Uninstall entries that may be laying around in the
  419.   // registry for older versions of the software that we're overwriting/
  420.   // upgrading...
  421.   var wr = getWinRegistry();
  422.   wr.setRootKey(wr.HKEY_LOCAL_MACHINE);
  423.   var i = 0; 
  424.   const uninstallKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
  425.   do {
  426.     var key = wr.enumKeys(uninstallKey, i++);
  427.     if (!key)
  428.       break;
  429.     key = uninstallKey + "\\" + key;
  430.  
  431.     // For us to remove the entry from the ARP uninstall list, the install 
  432.     // folder paths must *match* and the display version strings must *NOT
  433.     // MATCH* - i.e. we don't want to remove the entry we just created for
  434.     // this version.
  435.     var itemInstallFolder = wr.getValueString(key, "InstallLocation");
  436.     var thisInstallFolder = wr.getValueString("SOFTWARE\\Mozilla\\Mozilla Firefox\\1.5 (en-US)\\Main", 
  437.                                               "Install Directory");
  438.     var itemInstallFolderShortName = File.windowsGetShortName(getFolder("file:///", itemInstallFolder));
  439.     var thisInstallFolderShortName = File.windowsGetShortName(getFolder("file:///", thisInstallFolder));
  440.     
  441.     var itemDisplayVersion = wr.getValueString(key, "DisplayVersion");
  442.     var thisDisplayVersion = "1.5 (en-US)";
  443.  
  444.     // It is possible that a user might have installed several products into
  445.     // the same directory that have the same "DisplayVersion" (e.g. "1.0")... 
  446.     // in this case we don't want to trash the Uninstall info for the others
  447.     // so we have to be sure to make sure Comment matches... we use Comment
  448.     // instead of DisplayName since DisplayName varies from version to version
  449.     // as it contains the version number, and this instance of javascript is
  450.     // crippled so as not to contain any useful string parsing.
  451.     var itemComment = wr.getValueString(key, "Comment");
  452.     var thisComment = "Mozilla Firefox";
  453.  
  454.     if ((itemComment == thisComment || itemComment == "The Browser, Reloaded.") && 
  455.         itemInstallFolderShortName == thisInstallFolderShortName &&
  456.         thisDisplayVersion != itemDisplayVersion && 
  457.         wr.isKeyWritable(key)) {
  458.       wr.deleteKey(key);
  459.       logComment("Removing obsolete uninstall key with upgrade: " + key);
  460.     }
  461.   }
  462.   while (true);
  463. }
  464.  
  465. logComment("initInstall: platformNode=" + platformNode);
  466. // end
  467. // end - OS type detection
  468.  
  469. var chromeNode = "en-US";
  470.  
  471. var regName    = "locales/mozilla/" + chromeNode;
  472. var chromeName = chromeNode + ".jar";
  473. var localeName = "locale/" + chromeNode + "/";
  474.  
  475. srDest = 1;
  476. err    = initInstall("en-US Langpack", "en-US", "1.5"); 
  477. logComment("initInstall: " + err);
  478.  
  479. fProgram = getFolder("Program");
  480. logComment("fProgram: " + fProgram);
  481.  
  482. if(verifyDiskSpace(fProgram, srDest))
  483. {
  484.   var chromeType = LOCALE;
  485.   var fTarget;
  486.  
  487.   err = addDirectory("",
  488.                      "bin",     // dir name in jar to extract 
  489.                      fProgram,  // Where to put this file (Returned from GetFolder) 
  490.                      "");       // Force Flag 
  491.   logComment("addDirectory() returned: " + err);
  492.  
  493.   setPackageFolder(fProgram);
  494.  
  495.   // check return value
  496.   if (err == SUCCESS)
  497.   {
  498.     fTarget = getFolder("Program", "defaults");
  499.     logComment("fTarget: " + fTarget);
  500.     err = addDirectory("",
  501.                        "bin/defaults", // dir name in jar to extract 
  502.                        fTarget,        // Where to put this file (Returned from GetFolder) 
  503.                        "");            // subdir name to create relative to fProgram 
  504.     logComment("addDirectory() returned: " + err);
  505.  
  506.     fTarget = getFolder("Program", searchPlugins);
  507.     logComment("fTarget: " + fTarget);
  508.     err = addDirectory("",
  509.                        "bin/searchplugins", // dir name in jar to extract 
  510.                        fTarget,          // Where to put this file (Returned from GetFolder) 
  511.                        "");                 // subdir name to create relative to fProgram 
  512.     logComment("addDirectory() returned: " + err);
  513.  
  514.     updateWinReg();
  515.     createShortcuts();
  516.  
  517.     err = performInstall(); 
  518.     logComment("performInstall() returned: " + err);
  519.   }
  520.   else
  521.   {
  522.     cancelInstall(err);
  523.     logComment("cancelInstall due to error: " + err);
  524.   }
  525. }
  526. else
  527.   cancelInstall(INSUFFICIENT_DISK_SPACE);
  528.  
  529. // end main
  530.