An "Offline" Web Platform Installer

Microsoft’s Web Platform installer provides the ability of installing web based components onto Windows Platforms.  The technology is simple to use and works well when a machine has access to the internet.  When the machine being installed don’t have access to the internet the installer becomes a problem.

To work around the internet facing requirements of the Web Platform Installer, it’s important to reflect on how the system works.

Firstly, the Web Platform Installer (https://go.microsoft.com/?linkid=9737537) receives an XML feed directly from Microsoft.  The “Web Platform Installer 5.0 Feed” (https://go.microsoft.com/?linkid=9842185) contains a list of all available software titles, a methodology to determine if the software is installed, lists of dependencies and a web address that may be used to download the particular title.

When the Web Platform Installer is used on a machine facing the internet, any selected software items are first downloaded to a local location before being installed.  The files will be downloaded into the “AppData” area of the person doing the install.  As long as the system is set to view hidden files and folders, the files downloaded as part of an online provisioning exercise will reside at:

C:\Users\%username%\AppData\Local\Microsoft\Web Platform Installer

There are two elements to note within the Web Platform Installer directory.  The first is that the largest of the xml files in the root of the folder is the Web Feed file with all the data related to performing an install.  The second element to note is that each software title installed on a machine corresponds to a folder within the nested “installers” directory.  This folder is the product name.  So, by copying the installers folder and the web feed xml, the same installs may be rerun on machines without internet access.

The Web Platform Installer also has a command-line version installed that may be called to install downloaded packages.

Example syntax and output is shown below:

C:\Program Files\Microsoft\Web Platform Installer\WebPiCmd-x64.exe /Install /Products: WAP_PowerShellAPI /XML: “C:\Temp\Web Platform Installer\1353597488.xml”

An important element of using the Web Platform Installer is that dependencies for each application are handled automatically.

If you are attempting to rerun a previous installation on machines that don’t have an internet connection, simply copying the Web Platform Installer folder from a machine that’s worked will provide all the packages required. If you got really stuck, it isn’t too difficult to manually download components from the XML feed & write them to their needed directories.  The directory structure represents:

“Web Platform Installer\installers\”  + ProductName   + “\” + sha1 hash  + “\”

 

cls
 
# Open Web Platform Installer Feed
 
$xml = [XML](Get-Content "C:\temp\Web Platform Installer\1343597488.xml")
 
 
# Attach a namespace definition
 
$ns = new-object Xml.XmlNamespaceManager $xml.NameTable
 
$ns.AddNamespace("wpi", "http://www.w3.org/2005/Atom")
 
 
#Select each of the installer nodes
 
$tmp = $xml.SelectNodes("//wpi:installer", $ns)
 
 
# For each 'installer'
 
for ($i = 0; $i -lt $tmp.Count; $i++) {
 
       $object = New-Object -TypeName PSObject –Prop `
 
               (@{'Product'      =$tmp.Item($i).ParentNode.ParentNode.productID;
 
                  'Title'        =$tmp.Item($i).ParentNode.ParentNode.metadata.title.innertext;
 
                  'Folder'       ="installers\$($tmp.Item($i).ParentNode.ParentNode.productID)\$($tmp.Item($i).installerFile.sha1)";
 
                  'Id'           = $tmp.Item($i).Id;
 
                  'Language'     = $tmp.Item($i).languageId;
 
                  'Architectures'=$tmp.Item($i).architectures.LastChild.Name;
 
                  'Source'       =$tmp.Item($i).installerFile.installerURL})
 
     #Only show downloadable modules
 
     if (!([string]::IsNullOrEmpty($tmp.Item($i).installerFile.sha1))){
 
        $object
 
      }
 
    }

 

Comments

Also be careful of spaces!  

The following is an example of installing Windows Azure Pack: Portal and API Express.

"C:\Program Files\Microsoft\Web Platform Installer\WebPiCmd-x64.exe" /Install /Products:WAP_SingleMachineInstallation /XML:"E:\Installers\Web Platform Installer\1343597488.xml"