Application Packaging and Delivery of an MSIX Application
Application Packaging and Delivery of an MSIX Application
The Three Step Workflow
App Volumes Administrators or Application Administrators responsible for capturing and delivering an MSIX application can leverage this three step workflow to capture and deliver MSIX applications using App Volumes.
The “Prepare” section will describe the environment used to prepare this guide and prerequisites needed to be successful.
The “Create” section provides step-by-step instructions on the creation of an empty Virtual Hard Disk (VHD), unpacking the MSIX application into the VHD, and finally, using App Volumes Tools to create the supported App Volumes Application Package resulting in the JSON and VHD files. Then, upload the two files to the App Volumes environment for assignment.
The “Validate” section is where we test the MSIX application delivery from the App Volumes Manager via an App Volumes user based assignment, we will then log into a Virtual Desktop, confirm the MSIX application delivery, and launch the application. A demo walk-through of the instructions in this guide is available in the Demonstrate section.
Prepare
The following components were present in the environment used to build and validate the scenario.
- Omnissa Horizon 8: virtual desktops built from a Windows 10 Guest OS image using the following method.
- App Volumes 4.x environment
- App Volumes Packaging virtual machine built using the guidelines outlined in Preparing a Packaging Virtual Machine, excluding installing the Horizon agent, App Volumes agent, and DEM agent.
- We have used App Volumes Tools to capture an application in VHD and VMDK formats.
- Additional software used;
- MSIX Manager tool
- The MSIX Application used in this demo is Python 3.12
- Optional: An application packager could use a 3rd party software or MSIX Packaging tool to capture an MSIX application from an executable or MSI.
Packaging Virtual Machine folder content
On the App Volumes Package capture VM, create a folder where you will create the empty Virtual Hard Disk (VHD), convert the Virtual Hard Disk (VHD) to the required App Volumes supported virtual disks (VHD and VMDK), and the JSON metadata files. In the demo, we have used the following folders;
- C:\MSIXAPPCAPTUREDISK - stores the created VHD, VMDK, and JSON files during the demo
- C:\MSIXMGR - Extract and store the MSIX Manager tool files here
- C:\MSIX_Apps - store the MSIX Application here. The demo has Python 3.12.
It is essential to note the following considerations;
- The App Volumes MSIX application package captured by App Volumes Tools can only contain a single MSIX application in the Virtual Hard Disk (VHD).
- The certificate used during the capture of an MSIX application should be present in the target virtual desktop for the application to successfully validate and launch.
Create
From the App Volumes Packaging Virtual Machine, the administrator/packager initiates the following steps:
Step 1: Create and mount a virtual hard disk (VHD)
- On the App Volumes Packaging VM, launch an elevated command prompt.
- Run the following DISKPART commands to create a virtual hard disk (VHD), format it, and mount it.
Syntax:
C:\DISKPART
DISKPART> CREATE VDISK FILE=<VHD File Location.vhd> MAXIMUM=<disk size) TYPE=expandable
DISKPART>SELECT VDISK FILE=<VHD File Location.vhd>
DISKPART> ATTACH VDISK
DISKPART> LIST DISK
DISKPART> SELECT DISK <No. that is associated with the above mounted VHD>
DISKPART> ATTRIBUTES DISK CLEAR READONLY
DISKPART> CONVERT GPT
DISKPART> CREATE PARTITION PRIMARY
DISKPART> FORMAT QUICK FS=NTFS LABEL=<Label Name Optional>
DISKPART> ASSIGN LETTER=<Available drive letter>
DISKPART> EXIT
Command used in the demo:
C:\DISKPART
DISKPART> CREATE VDISK FILE=”C:\MSIXAppCaptureDisk\MSIXAPP.vhd” MAXIMUM=10240 TYPE=expandable
DISKPART>SELECT VDISK FILE=”C:\MSIXAppCaptureDisk\MSIXAPP.vhd”
DISKPART> ATTACH VDISK
DISKPART> LIST DISK
DISKPART> SELECT DISK 1
DISKPART> ATTRIBUTES DISK CLEAR READONLY
DISKPART> CONVERT GPT
DISKPART> CREATE PARTITION PRIMARY
DISKPART> FORMAT QUICK FS=NTFS LABEL=”Application”
DISKPART> ASSIGN LETTER=”E”
DISKPART> EXIT
Diskpart commands run on the Packaging Virtual Machine:
Step 2: Using the MSIX Manager (MSIXMGR.EXE)
- Run the MSIX Manager Unpack command to unpack the Python MSIX Application into the virtual hard disk (VHD) created in the previous steps.
Syntax:
“C:\msixmgr\x64\msixmgr.exe” -Unpack -packagePath <Path of the MSIX Application> -destination <Destination Drive\Folder> -applyACLs
Command used in the demo:
“C:\msixmgr\x64\msixmgr.exe” -Unpack -packagePath “C:\MSIX_Apps\Python 3.12\PythonSoftwareFoundation.Python.3.12_3.12.1008.0_x64_qbz5n2kfra8p0.msix” -destination E:\apps -applyACLs
Output of the MSIXMGR unpacking the MSIX Application:
Note: ensure that the destination driven\path does not contain quotations, like the source package path shown in the above screenshot.
Unmounts the virtual hard disk (VHD)
- Launch an elevated command prompt and run DISKPART
- Within the DISKPART prompts:
- List the Volumes.
- Select the Volume mounted by the virtual hard disk (VHD), and seek confirmation.
- Set the selected Volume attribute to NODEFAULTDRIVELETTER.
- Select the VDISK virtual hard disk (VHD) file and detach the VDISK.
Syntax:
C:\DISKPART
DISKPART> LIST VOLUME
DISKPART> SELECT VOLUME <No.>
DISKPART> ATTRIBUTES VOLUME SET NODEFAULTDRIVELETTER
DISKPART> SELECT VDISK FILE=<VHD File Location.vhd>
DISKPART> DETACH VDISK
DISKPART>EXIT
Command used in the demo:
C:\DISKPART
DISKPART> LIST VOLUME
DISKPART> SELECT VOLUME 4
DISKPART> ATTRIBUTES VOLUME SET NODEFAULTDRIVELETTER
DISKPART> SELECT VDISK FILE=”C:\MSIXAppCaptureDisk\MSIXAPP.vhd”
DISKPART> DETACH VDISK
DISKPART>EXIT
Diskpart commands run on the Packaging Virtual Machine:
Step 3: Use App Volumes Tools (appcapture.exe)
- Launch an elevated command prompt and run the App Volumes Tools (appcapture.exe) shown in the syntax section below.
- The first appcapture command executes to generate and extract the metadata to a JSON file.
- The second appcapture command executes to generate the VMDK file from the VHD file.
- The next step is to rename the MSIXAPP.* files to Python_workstation.vhd, Python_workstation.vmdk and Python.json.
- Finally, copy the Python.json and Python_workstation.vmdk files to the App Volumes Manager server at the following location
<Installation_Directory>\CloudVolumes\Manager\ppv\packages
.
Syntax:
“C:\Program Files (x86)\VMware\AppCapture\Appcapture.exe” /addmeta “<Path to VHD>” /msix <Path to install MSIX Package>
“C:\Program Files (x86)\VMware\AppCapture\Appcapture.exe” /msixvmdk “<Path to VHD>”
Command used in the demo:
“C:\Program Files (x86)\VMware\AppCapture\Appcapture.exe” /addmeta “C:\MSIXAPPCAPTUREDISK\MSIXAPP.vhd” /msix apps\PythonSoftwareFoundation.Python.3.12_3.12.1008.0_x64_qbz5n2kfra8p0
“C:\Program Files (x86)\VMware\AppCapture\Appcapture.exe” /msixvmdk “C:\MSIXAPPCAPTUREDISK\MSIXAPP.vhd”
App Volumes tools (appcapture) command run to generate the VMDK/VHD and JSON files:
Step 4: Upload the VMDK and JSON files into the designated storage.
- Login to the App Volumes Manager console.
- Navigate to the CONFIGURATION > Storage and click Upload Templates.
- This action innumerates the Application Packages found in the following location
<Installation_Directory>\CloudVolumes\Manager\ppv\packages
- If a VMDK and JSON are in the correct naming format, as shown above, they will be listed below.
- The demo will show the capture and upload of the MSIX format of the Python application. And since it is copied to the correct location, we see it listed below.
- This Application Package is not in the App Volumes environment and is listed as
No
under the Exists tab.
- Click Upload to initiate uploading this new Application Package into App Volumes.
- This Application Package is not in the App Volumes environment and is listed as
- You can now validate the Upload process by navigating to the INVENTORY > Applications tab.
- If you do not see your application listed, click Import to import the Application Package into the inventory. Then click the Application tab again to refresh the page.
- If you do not see your application listed, click Import to import the Application Package into the inventory. Then click the Application tab again to refresh the page.
Step 5: The following are administrative steps performed in the App Volumes Manager Admin UI
- Expand the Application (in this example, Python), and click Edit.
- This will take you to the Edit Application section, where you, as the App Volumes Administrator or Packager, can tag the Application with an application Owner.
- When creating an application package using App Volumes Tools, and is uploaded into the App Volumes console, the Owner field is populated with the hostname\administrator’s account that created the package from the source computer, be it physical or a virtual machine. In a production environment, to maintain consistency and tracking, it is advisable to tag the Owner.
- When creating an application package using App Volumes Tools, and is uploaded into the App Volumes console, the Owner field is populated with the hostname\administrator’s account that created the package from the source computer, be it physical or a virtual machine. In a production environment, to maintain consistency and tracking, it is advisable to tag the Owner.
- Here, an Active Directory Account will need to be queried and selected, and this Active Directory account will be the new Owner of the imported Application Package.
- Suppose an application has several packages and the latest package version must be assigned and delivered to an entity. In that case, you can use the Marker assignment type and mark the package as CURRENT when assigning the application to the entity. As a result, the entity always receives the latest version of the application.
- We navigate to the INVENTORY > Packages > expand the package and click Set CURRENT.
- We navigate to the INVENTORY > Packages > expand the package and click Set CURRENT.
- Finally, to deliver an App Volumes application package to an end user, you must assign an application to an entity that belongs to your organization's active directory. An entity can be a user, computer, Group, or Organizational Unit OU.
- Navigate to INVENTORY > Applications > expand the application and click Assign.
- This brings up the Assign Application screen where you, the App Volumes Administrator, can assign this application.
- Query the Active Directory, and identify the entity that shows a status of
Available
. - Next, assign the package that is set to CURRENT or select the Package to manually select the version of the package (provided you have multiple versions of packages uploaded).
- And finally, click Assign.
- Navigate to INVENTORY > Applications > expand the application and click Assign.
This will take you back to the INVENTORY > Applications tab, where you can expand the application to validate the application assignment.
The next step is to have the end user validate the application assignment by logging into the virtual desktop, which has the App Volumes Agent installed and registered to this App Volumes environment.
Validate
Validate the assignment of the imported App Volumes MSIX Application Package.
To validate that the assignment and test the launch of the application is successful, have the entitled user log in to the target virtual desktop.
- Have the user log in using the Horizon Client or HTML browser and launch their virtual desktop session.
- Upon launch of the desktop session, we have the user click Start to view the list of applications.
- The below screenshot shows the assignment of Python 3.12 made available to the user to consume within this virtual desktop session.
- The below screenshot shows the assignment of Python 3.12 made available to the user to consume within this virtual desktop session.
- Launching the Python 3.12 application, results in the below launch of the application within the virtual desktop session and has a confirmation that it is an MSIX-based application stored and launched from the
C:\Program Files\WindowsApps\<sub-folder>
.
This confirms the successful delivery of the MSIX Application Package to a virtual desktop session.
Note:
Follow MSIX packaging and installation guidelines as well as the Best practices using the MSIX Packaging Tool to create your MSIX installer, which generates the initial VHD and then converts it to an App Volumes VHD and JSON.
Demonstrate
For a brief demo of the steps in this guide, see:
Summary and Additional Resources
The administration of an App Volumes environment is inherently complex and constantly evolving. This Application Packaging series aims to be a steady companion, offering reliable guidance and support to help you effectively manage these daily operational tasks. By utilizing this resource, you will be better prepared to handle the challenges of your role, ensuring operational excellence and technical proficiency with Omnissa App Volumes.
We trust you will find this Application Packaging series invaluable in your day-to-day activities and encourage you to refer to it regularly. Your feedback is welcome and will be instrumental in continuously improving this resource.
Additional Resources
Explore the following additional resources:
- Reference Architecture – App Volumes
- App Volumes Product Page
- App Volumes Product Documentation
- App Volumes Knowledge Base Articles
- Horizon 8 Product Page
- Dynamic Environment Manager Product Page
Changelog
The following updates were made to this guide.
Date |
Description of Changes |
Oct-2024 |
|
July-2024 |
|
Jun-2024 |
|
Authors and Contributors
The following authors and contributors have helped make this paper possible:
Authors
- Sujay Gopalan, Sr. Technical Marketing Architect, Omnissa.
Reviewers
- Graeme Gordon, Sr. Staff Architect, Omnissa.
- Rick Terlep, Staff Technical Marketing Architect, Omnissa.
- Mike Erb, Staff Technical Marketing Architect, Omnissa.
Feedback
Your feedback is valuable. To comment on this paper, either use the feedback button or contact us at tech_content_feedback@omnissa.com.