Managing the default application associations in Windows 10 used to be simple, the process was straightfoward and worked without issue. With Windows 10 being released semi-annually you would expect some very minor process differences between versions, however it appears setting default assoications isnt that simple any more.
The method ive used for Windows 10 1511 & 1607 was easy, simply;
- Build reference machine
- Install applications that will be be default for file types (in my case Acrobat for PDF, Chrome for Web)
- Set new application defaults for extensions
- Run (elevated) to capture my changes
Dism /Online /Export-DefaultAppAssociations:\\Server\Share\AppAssoc.xml
- Appy the above file either with DISM during OSD, or via Group Policy
Dism.exe /online /Import-DefaultAppAssociations:\\Server\Share\AppAssoc.xml
It turns out that when attempting to do this with 1703 , you will see “App defaults were reset” on a machine with default applications applied with the above method. The ‘app default reset’ issue may also rear its ugly head even if you dont set file associations, it seems to happen if you have any other application present that has attempted to take control of the extension. In my case when Acrobat was installed it attempted to take control of the PDF extension. Windows seems to have changed the way associations are set in a Windows Update (KB3135173), if an application is not updated to adress this change it may trigger the association to fall back to default. When setting application defaults through the GUI, windows will set a hash value (assume for security) for each extension type.
The first step on the road to make file associations to behave is to take note of the ProgID that is assigned to each extension type by default, this can be achieved by running the DISM /Export command discussed earlier. Below is an export from a stock Windows 10 1703 build. Note PDF is not present until it is modified through the default apps GUI.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<DefaultAssociations> | |
<Association Identifier=".3gp2" ProgId="WMP11.AssocFile.3G2" ApplicationName="Windows Media Player" /> | |
<Association Identifier=".arw" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".bmp" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".cr2" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".crw" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".dib" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".epub" ProgId="AppXvepbp3z66accmsd0x877zbbxjctkpr6t" ApplicationName="Microsoft Edge" /> | |
<Association Identifier=".erf" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".gif" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".htm" ProgId="AppX4hxtad77fbk3jkkeerkrm0ze94wjf3s9" ApplicationName="Microsoft Edge" /> | |
<Association Identifier=".html" ProgId="AppX4hxtad77fbk3jkkeerkrm0ze94wjf3s9" ApplicationName="Microsoft Edge" /> | |
<Association Identifier=".jfif" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".jpe" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".jpeg" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".jpg" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".jxr" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".kdc" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".MP2" ProgId="WMP11.AssocFile.MP3" ApplicationName="Windows Media Player" /> | |
<Association Identifier=".mpeg" ProgId="WMP11.AssocFile.mpeg" ApplicationName="Windows Media Player" /> | |
<Association Identifier=".mrw" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".nef" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".nrw" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".orf" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".oxps" ProgId="Windows.XPSReachViewer" ApplicationName="XPS Viewer" /> | |
<Association Identifier=".pef" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".png" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".raf" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".raw" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".rw2" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".rwl" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".sr2" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".srw" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".tif" ProgId="PhotoViewer.FileAssoc.Tiff" ApplicationName="Windows Photo Viewer" /> | |
<Association Identifier=".tiff" ProgId="PhotoViewer.FileAssoc.Tiff" ApplicationName="Windows Photo Viewer" /> | |
<Association Identifier=".txt" ProgId="txtfile" ApplicationName="Notepad" /> | |
<Association Identifier=".url" ProgId="IE.AssocFile.URL" ApplicationName="Internet Browser" /> | |
<Association Identifier=".wdp" ProgId="AppX43hnxtbyyps62jhe9sqpdzxn1790zetc" ApplicationName="Photos" /> | |
<Association Identifier=".website" ProgId="IE.AssocFile.WEBSITE" ApplicationName="Internet Explorer" /> | |
<Association Identifier=".xps" ProgId="Windows.XPSReachViewer" ApplicationName="XPS Viewer" /> | |
<Association Identifier="http" ProgId="AppXq0fevzme2pys62n3e0fbqa7peapykr8v" ApplicationName="Microsoft Edge" /> | |
<Association Identifier="https" ProgId="AppX90nv6nhay5n6a98fnetv7tpk64pp35es" ApplicationName="Microsoft Edge" /> | |
<Association Identifier="mailto" ProgId="AppXydk58wgm44se4b399557yyyj1w7mbmvd" ApplicationName="Mail" /> | |
</DefaultAssociations> |
Note that the ProgID changes for some applications depending on the extension its referring to, Edge has many ProgID’s
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<Association Identifier=".htm" ProgId="AppX4hxtad77fbk3jkkeerkrm0ze94wjf3s9" ApplicationName="Microsoft Edge" /> | |
<Association Identifier=".html" ProgId="AppX4hxtad77fbk3jkkeerkrm0ze94wjf3s9" ApplicationName="Microsoft Edge" /> | |
<Association Identifier="http" ProgId="AppXq0fevzme2pys62n3e0fbqa7peapykr8v" ApplicationName="Microsoft Edge" /> | |
<Association Identifier="https" ProgId="AppX90nv6nhay5n6a98fnetv7tpk64pp35es" ApplicationName="Microsoft Edge" /> | |
<Association Identifier="pdf" ProgId="AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723" ApplicationName="Microsoft Edge" /> |
The first trick in building a working default associations file is to follow the same process from before
- Install applications that will be be default for file types (in my case Acrobat for PDF, Chrome for HTM/L, HTTP/S, Outlook for MailTo)
- Set new application defaults for extensions (from Settings/System/Default apps)
- Run (elevated) to capture changes
Dism /Online /Export-DefaultAppAssociations:\\Server\Share\AppAssoc.xml
- Open your XML in your favourite text editor.
- Remove all values except for those you wish to change defaults for
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<DefaultAssociations> | |
<Association Identifier=".htm" ProgId="ChromeHTML" ApplicationName="Google Chrome" /> | |
<Association Identifier=".html" ProgId="ChromeHTML" ApplicationName="Google Chrome" /> | |
<Association Identifier=".pdf" ProgId="Acrobat.Document.2015" ApplicationName="Adobe Acrobat DC" /> | |
<Association Identifier="http" ProgId="ChromeHTML" ApplicationName="Google Chrome" /> | |
<Association Identifier="https" ProgId="ChromeHTML" ApplicationName="Google Chrome" /> | |
<Association Identifier="mailto" ProgId="Outlook.URL.mailto.15" ApplicationName="Outlook 2016" /> | |
</DefaultAssociations> |
The next step is to take not of each ‘ProgID’ from the ‘stock’ defaults file and add the following to each element above;
ApplyOnUpgrade=”true”
OverwriteIfProgIdIs=”<ProgID>”
Your final product should look something like this;
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<DefaultAssociations> | |
<Association Identifier=".htm" ProgId="ChromeHTML" ApplicationName="Google Chrome" ApplyOnUpgrade="true" OverwriteIfProgIdIs="AppX4hxtad77fbk3jkkeerkrm0ze94wjf3s9"/> | |
<Association Identifier=".html" ProgId="ChromeHTML" ApplicationName="Google Chrome" ApplyOnUpgrade="true" OverwriteIfProgIdIs="AppX4hxtad77fbk3jkkeerkrm0ze94wjf3s9" /> | |
<Association Identifier=".pdf" ProgId="Acrobat.Document.2015" ApplicationName="Adobe Acrobat DC" ApplyOnUpgrade="true" OverwriteIfProgIdIs="AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723" /> | |
<Association Identifier="http" ProgId="ChromeHTML" ApplicationName="Google Chrome" ApplyOnUpgrade="true" OverwriteIfProgIdIs="AppXq0fevzme2pys62n3e0fbqa7peapykr8v" /> | |
<Association Identifier="https" ProgId="ChromeHTML" ApplicationName="Google Chrome" ApplyOnUpgrade="true" OverwriteIfProgIdIs="AppX90nv6nhay5n6a98fnetv7tpk64pp35es" /> | |
<Association Identifier="mailto" ProgId="Outlook.URL.mailto.15" ApplicationName="Outlook 2016" ApplyOnUpgrade="true" OverwriteIfProgIdIs="AppXydk58wgm44se4b399557yyyj1w7mbmvd" /> | |
</DefaultAssociations> |
The XML is now ready for deployment, however this XML will not apply using the DISM method in 1703, when i attempted to apply this file all other application extensions NOT defined would spam the notification centre with messages of ‘app default reset’.
The easiest way to apply this file is via Group Policy. In Computer Configuration\Administrative Templates\Windows Components\File Explorer set the value of DefaultAssociationsConfiguration to \\Server\Share\AppAssoc.xml.
Note: The path must be readable by workstations.
Applying this Policy will allow file associations to work correctly, i noticed that i still saw the painful ‘app defaults reset’ for PDF files only. More on this shortly.
In my enviroment i have a mixed bag of 1511 , 1607 and 1703 versions of Windows 10. Setting a Group Policy for just the 1703 revision would mean a seperate policy targeted to JUST the 1703 revision of Windows (filtered via WMI). I found this messy. I wanted these associations to only apply during builds of 1703. If you are in the same boat follow along.
The Group Policy modifies the registry value of DefaultAssociationsConfiguration in HKLM:\Software\Policies\Microsoft\Windows\System, we can edit this item with our modified XML’s path during OSD. Via PowerShell;
Set-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\System -Name DefaultAssociationsConfiguration -Value '\\Server\Share\AppAssoc.xml'
Add this command to a step in your Windows 10 1703 Task Sequence in SCCM. I have a Windows 10 Modifications PS Script that ive added this to.
As i mentioned previously this method would set defaults just fine, however PDF extensions would still fall back to Edge, to fix this you want to run the following set of commands. (Line 5 , 6 , 7). If you see the fallback behaviour for any other applications, use the same method and adjust for the ProgID in question.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Try | |
{ | |
Set-ItemProperty –Path HKLM:\Software\Policies\Microsoft\Windows\System –Name DefaultAssociationsConfiguration –Value '\\Server\Share\AppAssoc.xml' | |
New-Item –Path HKLM:\Software\Classes\AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723 | |
Set-ItemProperty –Path HKLM:\Software\Classes\AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723 –Name NoOpenWith –Value '' | |
Set-ItemProperty –Path HKLM:\Software\Classes\AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723 –Name NoStaticDefaultVerb –Value '' | |
#DISM Method does not work in 1703. | |
#Dism.exe /online /Import-DefaultAppAssociations:\\Server\Share\AppAssoc.xml | |
} | |
Catch | |
{ | |
Write-Host "Error Output…" –ForegroundColor Yellow ; ` | |
$Error[0].Exception ; ` | |
$Error[0].InvocationInfo | |
} |
*Note ProgID matches Edge.
These steps will remove Edge from your right click>open with conext menu but will stop Edge from falling back.
** Some have suggested to overwrite OEMDefaultAssociations.xml in System32 with your modified Default XML during OSD, however i had no luck with this.
Hopefully this helps others, there are multiple issues im working through in Windows 10 1703, in no particular order these are;
- Default app model is broken and does not work via DISM (need to use GPO)
- OOBE is broken / something went wrong (need to use depreciated Skip OOBE)
- Start menu does not honour size/orientation if you have more than 1 group
- The order of quick launch does not work in start menu xml
- Start Menu doesn’t honour locked sections
I will add a post explaining each of these issues (with workarounds) when i get some time.
Cheers,
Dan
Just for others having the same fun.
Actually, on Windows 10 build 1703 even the “old” XML works fine without (OverwriteIfProgIdIs) but only for “new users” in the system. For existing ones, seems like the only way is GPO…
However, since I needed to use it during MDT deployment and built-in Administrator I have edited the vanilla “.WIM” offline.
dism /mount-image /imagefile:”…\Windows 10 Enterprise x64 1703\sources\install.wim” /index:1 /mountdir:C:\whatever
dism /Image:C:\whatever /Import-DefaultAppAssociations:..\DefaultApps.xml
Dism /Commit-Image /MountDir:C:whatever
LikeLike
Nice Post, It Works Amazing better then Import Dism 🙂
LikeLike
Does it work on Windows 10 1709 build ?
LikeLike