Dynamically convert MSI versions of Project and Visio to Click-to-Run
Published Aug 12 2019 06:38 AM 18.4K Views
Microsoft

With the latest release of the Office Deployment Tool (ODT) we have implemented a new feature based on customer feedback. It is now possible to make the installation of a C2R product dependent on the previous presence of an MSI-based product. As it works for all products, it is especially helpful when deploying Project and/or Visio to users which had it previously. The feature is known as MSI Condition.

 

Prerequisites
In order to use the new feature, the following prerequisites apply:
• Office Deployment Tool 16.0.11901.20022 or newer
• The feature is intended to be used when an Admin wants to migrate the user from Microsoft 365 Apps/Project/Visio in one pass with one XML.
• If you are not using the CDN as an installation source, make sure to have the matching source files in your specified source path.
• MSI Condition will detect 2010/2013/2016 MSI products.

 

Scenario
Since the release of RemoveMSI we’ve had the capability for your “first install” to match the MSI version of legacy Office and replace with Microsoft 365 Apps. MSI Condition allows an admin to specify a list of MSI Product ID’s along with a Product ID for a Click-to-Run install such as Subscription, Standard Perpetual and Professional Perpetual.

 

How to use
To use this feature simply add the MSICondition attribute to the Product node as shown in the example below. Once you have created the XML run setup.exe /configure like you would with any other installation process and that’s it

 

Product Codes you could use:

  • PrjStd
  • PrjPro
  • VisStd
  • VisPro
  • PrjStdR
  • PrjProR
  • VisStdR
  • VisProR

 

Benefit
In the past customers created very complex scripting to detect and replace Office products, in some cases running the install up to three times based on the number of previous products detected. We have even seen customers simply ignore Project and Visio and remove everything, then wait for helpdesk to get a call and replace it with the version the end user requested. MSI Condition makes your migration from MSI to C2R flow smoothly with one XML for your deployment which dynamically adjusts to the task at hand.

 

MSIcondition.jpg

Please note that the above picture shows a simplified XML(in the image) to just show the concept behind it. For a fully working XML, please refer to the next section.

 

Sample XML
The following XML will
• install Microsoft 365 Apps from Monthly channel, and match the previously installed languages
• install Visio Pro on machines that already have any older MSI version of Visio Pro
• install Project Pro on machines that already have any older MSI version of Project Pro
• remove all older MSI versions of Microsoft 365 Apps, Project and Visio

 

 

 

 

 

 

<Configuration>
	<Add Channel="Monthly" OfficeClientEdition="64">

		<Product ID="O365ProPlusRetail">
			<Language ID="en-us"/>
                        <Language ID="MatchPreviousMSI"/>
			<ExcludeApp ID="Groove"/>
			<ExcludeApp ID="OneNote"/>
	</Product>

		<Product ID="VisioProRetail" MSICondition="VisPro,VisProR">
			<Language ID="en-us"/>
                        <Language ID="MatchPreviousMSI"/>
			<ExcludeApp ID="Groove"/>
		</Product>

		<Product ID="ProjectProRetail" MSICondition="PrjPro,PrjProR">
			<Language ID="en-us"/>
                        <Language ID="MatchPreviousMSI"/>
			<ExcludeApp ID="Groove"/>
		</Product>

	</Add>
	<RemoveMSI/>
</Configuration>

 

 

 

 

 

 

Is this limited to Visio and Project?
No, it is not. The feature will accept any valid product ID for Click-To-Run and any MSI code as a condition. So, you can mix and match to your specific needs you could also build a deployment which installs e.g. Access Runtime for existing users of it:

 

 

 

 

 

 

<Configuration>
	<Add>
		<Product ID="O365ProPlusRetail">
			<Language ID="en-us"/>
			<Language ID="MatchPreviousMSI"/>
			<ExcludeApp ID="Access"/><
		</Product>
		<Product ID="AccessRuntimeRetail" MSICondition="AccessRT">
			<Language ID="en-us"/>
			<Language ID="MatchPreviousMSI"/>
		</Product>
	</Add>
</Configuration>

 

 

 

 

 

 

 

The Authors
This blog post is brought to you by @Matt Philipenko (OFFICE PFE)  and @Martin Nothnagel , two senior ProPlus deployment experts at Microsoft from the Services organization. We’re looking forward to your questions, feedback and comments below.

15 Comments
Copper Contributor
This sounds like a great idea - we are one of those mentions who uses a very large Powershell script to target, remove and the re-add licensed products as needed on each user PC. We aren't able to get this new XML code working however with a local/offline installation source. Below is the Add section of the XML we are using - we run setup.exe /download with this XML section and then setup.exe /configure. If we try this out on a system with OPP already installed (/configure option) and we install Project Pro 2010, it updates OPP to the newest build which was in the local/offline install folder, but then removes Project Pro, however neglects to replace the product with the CTR version. Our understanding from this article that the MSI version of Project will be removed and replaced with the CTR version (if detected) - is that accurate? (Note that I replaced < with } and > with } , to each line so I could post snippet here as HTML code isn't permitted): {Add OfficeClientEdition="64" Channel="Broad" ForceUpgrade="TRUE"} {Product ID="O365ProPlusRetail"} {Language ID="en-us" /} {ExcludeApp ID="Groove" /} {ExcludeApp ID="Teams" /} {/Product} {Product ID="VisioProRetail" MSICondition="VisPro,VisProR"} {Language ID="en-us"/} {Language ID=" MatchPreviousMSI"/} {ExcludeApp ID="Groove"/} {/Product} {Product ID="ProjectProRetail" MSICondition="PrjPro,PrjProR"} {Language ID="en-us"/} {Language ID=" MatchPreviousMSI"/} {ExcludeApp ID="Groove"/} {/Product} {/Add}
Microsoft

@macrospect 

 

First and foremost thanks for reaching out.  As far as your XML can you email it to me? mattphil@microsoft.com 

As per the workflow it looks like ProPlus is already installed. The MSICondition is targeted for MSI to C2R scenarios. For your scenario I recommend using a new feature posted by my colleague located here. It allows the IT Admin to install Project/Visio/LanguagePack/ProofingTools after ProPlus is already installed. We've "coin'd" this "2nd install"

NOTE: It requires you have access to the CDN.

If that is not supported in your enterprise then you will want to make sure you have the necessary files in the sourcepath for the install. But ant any rate send me over your XML and we'll take a look and then we can post back to make sure anyone following this thread stays on track.

Copper Contributor

@Matt_Philipenko 

 

Thank you for getting back to me so soon and for the very helpful feedback. So based on that other article you sent we may be able to leverage 

Add Version="MatchInstalled"

In order to deploy visio and project. I presume this works with any Office Product ID just as this article does?

 

Looking at the broader picture, so if we have all MSI versions of Office products versions, then that is what this article pertains to correct? For pure-MSI installs on our non-transitioned machines, our install script will automatically remove the previous versions of Office, InfoPath, Access DB Runtimes, Visio and Project as part of the preinstall process. If we still remove those products beforehand except for say Visio, does that mean that the Click to Run will still not covert MSI to click to run? I am trying to understand under what condition/environment this is designed to run within.

 

Thanks! 

Copper Contributor

Matt, I am testing this out and I'm assuming I just have the xml incorrect but if you have both visio and project, for example, in the xml, though only visio in this case is installed, should it know that it should NOT install Project because it's not already there? 

 

<Product ID="O365ProPlusRetail">
      <Language ID="en-us" />
      <Language ID="MatchPreviousMSI" />
      <Language ID="MatchPreviousMSI" />
      <ExcludeApp ID="Groove" />
      <ExcludeApp ID="OneDrive" />
      <ExcludeApp ID="Teams" />
    </Product>
    <Product ID="VisioStdXVolume" MSICondition="VisioStdRetail,VisioStdXVolume" PIDKEY="KEY">
      <Language ID="en-us" />
      <Language ID="MatchPreviousMSI" />
      <Language ID="MatchPreviousMSI" />
      <ExcludeApp ID="Groove" />
      <ExcludeApp ID="OneDrive" />
      <ExcludeApp ID="Teams" />		
    </Product>
    <Product ID="ProjectStdXVolume" MSICondition="ProjectStdRetail,ProjectStdXVolume" PIDKEY="">
      <Language ID="en-us" />
      <Language ID="MatchPreviousMSI" />
      <Language ID="MatchPreviousMSI" />
      <ExcludeApp ID="Groove" />
      <ExcludeApp ID="OneDrive" />
      <ExcludeApp ID="Teams" />
    </Product>

That snippet will remove Office Pro Plus 2016 and Visio 2016 and install O365 Pro Plus, Visio 2016, and Project 2016. I want to confirm I have it right.

Microsoft

@macrospect 

Thanks again for your follow up. You're correct the attribute Version="Matchinstalled" matches the version number of ProPlus when you're adding the second product such as Project/Visio. The purpose of this attribute is to allow an IT Admin to run a second install with a supported Product ID and not have to download the full office source. Prior to this attribute IT Admins would have to download the full Office source content to add the secondary product and in some cases it was as small as 100MB. 

 

To answer your second question about MSI Condition the design of this attribute was purposed for Dynamically matching the MSI version preinstalled on the device. ie: If User A had Office Project and User B only has Office you can use one XML to deploy to both and achieve the same result at the end. User A will get ProPlus and ProjectProRetail(Subscription) and User B will get ProPlus.  I saw you called out AccessDB Runtime which is a supported condition. InfoPath although has been discontinued and remove from our 2016 Products and is only available as a download located here

 

In closing, your question regarding what happens if the MSI is already removed? The MSI Condition attribute will not be able to detect which Product Code for MSI was on the device and  it will not be included in the install.

Microsoft

@jedinger 

 

First off, thanks for reaching out and choosing Office ProPlus we're working hard to make it easier to manage for the IT Admin. I looked over you XML and the MSICondition Product Codes look like Click-to-Run Product ID's and not MSI Product Codes from my original post and example 

<Product ID="ProjectProRetail" MSICondition="PrjPro,PrjProR">

In addition, your LanguageID attribute has repeated MatchPreviousMSI and The PIDKEY attribute does not include the KMS key.(This might be because you removed if using a MAK key and didn't want to share with the world)  NOTE: If using a KMS key the default GVLK is the same for every customer the unique key for each customer is the KMS Host key that will activate your KMS host. In order to identify the MSI Product Code you can use  ROIScan and look for ConfigProductName. There are also a lot of other ways to find out your MSI Product Code available on a web search. 

 

In closing, to answer your main question MSI Condition was designed to dynamically match the installed MSI version with a Click-to-Run based version. In your scenario I think it's the MSICondition Product codes not being correct and defaulting to install the specified Product ID's only.  

Copper Contributor

Matt, 

 

So If I understand you correctly...

 

<Product ID="VisioStdXVolume" MSICondition="VisStd,VisStdR" PIDKEY="">
	<Language ID="en-us" />
	<Language ID="MatchPreviousMSI" />
	<ExcludeApp ID="Groove" />
	<ExcludeApp ID="OneDrive" />
	<ExcludeApp ID="Teams" />		
</Product>

<Product ID="ProjectStdXVolume" MSICondition="PrjStd,PrjStdR" PIDKEY="">
      <Language ID="en-us" />
      <Language ID="MatchPreviousMSI" />
      <ExcludeApp ID="Groove" />
      <ExcludeApp ID="OneDrive" />
      <ExcludeApp ID="Teams" />
</Product>

That should find my visio install (I used that ROIScan tool and it came back with "Config ProductName VISSTD") and NOT install Project since it's not installed, correct? And yes, I removed the VLK from the snippets.

Microsoft

@jedinger 

 

Yes!  That should do the trick!  

Copper Contributor

Follow up question:

 

Why would Word show that it's in semi-annual targeted when I had Monthly in the xml?

 

<Configuration ID="b0041f9a-52e1-49e6-8853-9a7f96e5e92e">
  <Info Description="This is OPP, Visio Std 2016, and Project Std 2016 without OneDrive or Teams.&#xA;It will uninstall ALL Office products (including Visio/Project).&#xA;It will NOT allow for shared activation." />
  <Add OfficeClientEdition="32" Channel="Monthly" OfficeMgmtCOM="TRUE" AllowCdnFallback="TRUE" ForceUpgrade="TRUE">
    <Product ID="O365ProPlusRetail">
      <Language ID="en-us" />
      <Language ID="MatchPreviousMSI" />
      <ExcludeApp ID="Groove" />
      <ExcludeApp ID="OneDrive" />
      <ExcludeApp ID="Teams" />
    </Product>
    <Product ID="VisioStdXVolume" MSICondition="VisStd,VisStdR" PIDKEY="KEY">
      <Language ID="en-us" />
      <Language ID="MatchPreviousMSI" />
      <ExcludeApp ID="Groove" />
      <ExcludeApp ID="OneDrive" />
      <ExcludeApp ID="Teams" />		
    </Product>
    <Product ID="ProjectStdXVolume" MSICondition="PrjStd,PrdStdR" PIDKEY="KEY">
      <Language ID="en-us" />
      <Language ID="MatchPreviousMSI" />
      <ExcludeApp ID="Groove" />
      <ExcludeApp ID="OneDrive" />
      <ExcludeApp ID="Teams" />
    </Product>
  </Add>
  <Property Name="SharedComputerLicensing" Value="0" />
  <Property Name="PinIconsToTaskbar" Value="FALSE" />
  <Property Name="SCLCacheOverride" Value="0" />
  <Property Name="AUTOACTIVATE" Value="TRUE" />
  <RemoveMSI />

clipboard_image_0.png

Microsoft

@jedinger  - Try closing the application and reopening.  Was ProPlus already installed on this box and then removed and tested again? I would also validate Version to report in the registry under the Configuration hive.

Copper Contributor

Yes, it's a VM I was just reverting to a snapshot of for ease of testing, so OPP was installed. It's showing up as semi-annual targeted for everyone that's getting the install.

Microsoft

@jedinger  Can you email me and we'll take this offline. 

Thank You,

mattphil@microsoft.com

Copper Contributor

Quick update. Was able to test and successfully deploy Project/Visio with the Office 365 rollout but found that it doesn't work for Visio/Project 2010 due to the way the licensing/networking works with the 2010 suite.

 

Thanks for your help Matt!

Iron Contributor

Is there a method via ODT to downgrade Visio 2019 or Project 2019 Pro to Std?  I can upgrade from Std to Pro but nothing happens the other way around, the Pro versions stick.

Thanks!

Russell

Copper Contributor

Have the same question and issue. 

 

I have Office 2016 Pro Plus with a Volume License I believe, or maybe it is an MSDNR version.  Nonetheless, they have provided us a MSI installer for this but our Project 2019 Pro came only with a click-2-run installer.  Does this same method work with what we have so we can install Project 2019 properly along side Office?

 

What is very odd is that up until recently, our Office didn't reflect any version or build in the About tab under Account.  Now, ever since Office Update happened, it now says Click-to-Run with a version and build number... very unusual isn't it???  I have a feeling the system overwrote the app with click-to-run process in order to execute the Office Updates and I'm soon going to have a rude awaking as the system will begin to get confused as to which one is actually installed.  I say that because now I see under your Windows, Installer folder, now there are 3 MSI packages installer when there should typically only be 2 file packages:  1) Office 16 Click-to-run Licensing Component and 2) Office 16 Click-to-run Localization Component.  Instead, now we also have a 3rd which is Office 16 Click-to-run Extensibility Component.

Co-Authors
Version history
Last update:
‎Feb 10 2023 12:26 PM
Updated by: