src/extensibility/node/ExtensionManagerDomain.js
function _cmdUpdate(packagePath, destinationDirectory, options, callback, pCallback) {
    _cmdInstall(packagePath, destinationDirectory, options, callback, pCallback, true);
}
function _cmdUpdate(packagePath, destinationDirectory, options, callback, pCallback) {
    _cmdInstall(packagePath, destinationDirectory, options, callback, pCallback, true);
}
function _cmdUpdate ( packagePath , destinationDirectory , options , callback , pCallback ) { _cmdInstall ( packagePath , destinationDirectory , options , callback , pCallback , true ) ; }
Implements the "update" command in the "extensions" domain.

Currently, this just wraps _cmdInstall, but will remove the existing directory
first.

There is no need to call validate independently. Validation is the first
thing that is done here.

After the extension is validated, it is installed in destinationDirectory
unless the extension is already present there. If it is already present,
a determination is made about whether the package being installed is
an update. If it does appear to be an update, then result.installationStatus
is set to NEEDS_UPDATE. If not, then it's set to ALREADY_INSTALLED.

If the installation succeeds, then result.installationStatus is set to INSTALLED.

The extension is unzipped into a directory in destinationDirectory with
the name of the extension (the name is derived either from package.json
or the name of the zip file).

The destinationDirectory will be created if it does not exist.

@param {string} Absolute path to the package zip file
@param {string} the destination directory
@param {{disabledDirectory: !string, apiVersion: !string, nameHint: ?string,
systemExtensionDirectory: !string}} additional settings to control the installation
@param {function} callback (err, result)
@param {function} pCallback (msg) callback for notifications about operation progress
Implements the update command in the extensions domain .