Windows Install

Windows Install Example

This example shows the installation of a XPI in which user profile information is contained.

Note the disk space verification, the editing of the Windows registry, the writing to the installation log, and the error checking before either performInstall or cancelInstall is called.

// this function verifies disk space in kilobytes
function verifyDiskSpace(dirPath, spaceRequired)
{
  var spaceAvailable;
  // Get the available disk space on the given path
  spaceAvailable = fileGetDiskSpaceAvailable(dirPath);
  // Convert the available disk space into kilobytes
  spaceAvailable = parseInt(spaceAvailable / 1024);
  // do the verification
  if(spaceAvailable < spaceRequired)
  {
    logComment("Insufficient disk space: " + dirPath);
    logComment("  required : " + spaceRequired + " K");
    logComment("  available: " + spaceAvailable + " K");
    return(false);
  }
  return(true);
}

function updateWinReg4Ren8dot3()
{
  var fProgram      = getFolder("Program");
  var fTemp         = getFolder("Temporary");
  //Notes:
  // can't use a double backslash before subkey
  // - Windows already puts it in.
  // subkeys have to exist before values can be put in.
  var subkey;  // the name of the subkey you are poking around in
  var valname; // the name of the value you want to look at
  var value;   // the data in the value you want to look at.
  var winreg = getWinRegistry() ;
  if(winreg != null)
  {
    // Here, we get the current version.
    winreg.setRootKey(winreg.HKEY_CURRENT_USER) ;// CURRENT_USER
    subkey  =
      "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce" ;
    winreg.createKey(subkey,"");
    valname = "ren8dot3";
    value = fProgram + "ren8dot3.exe " + fTemp + "ren8dot3.ini";
    err     = winreg.setValueString(subkey, valname, value);
  }
}

function prepareRen8dot3(listLongFilePaths)
{
  var fTemp        = getFolder("Temporary");
  var fProgram     = getFolder("Program");
  var fRen8dot3Ini = getWinProfile(fTemp, "ren8dot3.ini");
  var bIniCreated  = false;
  var fLongFilePath;
  var sShortFilePath;
  if(fRen8dot3Ini != null)
  {
    for(i = 0; i < listLongFilePaths.length; i++)
    {
      fLongFilePath = getFolder(fProgram, listLongFilePaths[i]);
      sShortFilePath  = File.windowsGetShortName(fLongFilePath);
      if(sShortFilePath)
      {
        fRen8dot3Ini.writeString("rename",
                sShortFilePath, fLongFilePath);
        bIniCreated = true;
      }
    }
    if(bIniCreated)
      updateWinReg4Ren8dot3() ;
  }
  return(0);
}

// main
var srDest;
var err;
var fProgram;
srDest = 449;
err    = initInstall(prettyName, regName, "6.0.0.2000110801");
logComment("initInstall: " + err);
fProgram = getFolder("Program");
logComment("fProgram: " + fProgram);
if(verifyDiskSpace(fProgram, srDest))
{
  setPackageFolder(fProgram);
  err = addDirectory("",
    "6.0.0.2000110801",
    "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)
  {
    err = performInstall();
    logComment("performInstall() returned: " + err);
  }
  else
    cancelInstall(err);
}
else
  cancelInstall(INSUFFICIENT_DISK_SPACE);
// end main