Windows 10

Deploying the new Microsoft Edge without a desktop shortcut

UPDATE 2020/04/16: See my updated post for an easier way.

Or more accurately, “a crash course into the inner workings of modern browser installers (which really aren’t that modern).” 

I really don’t understand why software installers still create desktop shortcuts, especially when that desktop is being synced to the cloud using OneDrive.  But since I was getting tired of cleaning these off as I deployed Windows 10 devices using Windows Autopilot (it gets really messy after a while as you end up with several copies of the same app), I decided I would try to see what it would take to prevent that from happening.

Since the new Chromium-based Microsoft Edge is based on the same engine as Chrome, the first task was to figure out how Chrome does this.  The official Chrome docs pointed to a master_preferences file; that links to a Chromium page that talks about the options.  And that documents a “do_not_create_desktop_shortcut” shortcut that sounded promising.  OK, but does Edge support the same master_preferences mechanism?  According to the Edge docs, it does.  So I tried it and it didn’t work.

Through additional reading, I discovered that there are two different types of settings in master_preferences: Those that are processed once at install time, and those that are processed for each user when they log on for the first time.  (Both Chrome and Edge use Active Setup to do their per-user stuff.)  OK, how do I provide these at install time?  I could prove that the Edge installer never tried to read the master_preferences file (regardless of where I put it), so there had to be another way. 

More searching lead me to this Chrome page on the ServerFault website.  It talked about creating a transform for the Chrome MSI, changing the command line to add the “do_not_create_desktop_shortcut” value.  The basic steps laid out there actually work the same for the Edge MSI, which you can download from the Edge for Enterprise web site.  Then you need the Orca tool (which is surprisingly hard to find, but it’s out there).  The steps themselves are interesting.  I’ll simplify them a little:

  • Figure out what settings you need.  Basically, you need to add your settings to what’s embedded into the Edge MSI itself.  You can find that string in the CustomActions table.  It’s the text on the BuildInstallCommand custom action, in the target column, after “installerdata,” highlighted below:
image

/silent /install “[ProductTag]” /installsource enterprisemsi[OptOmahaArgs] /appargs “appguid={56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}&installerdata=%7B%22distribution%22%3A%7B%22msi%22%3Atrue%2C%22system_level%22%3Atrue%2C%22verbose_logging%22%3Atrue%2C%22msi_product_id%22%3A%22DCF62978-E764-38B6-8D70-FD4BFF0EDEE5%22%2C%22allow_downgrade%22%3Afalse%7D%7D

  • Use your favorite HTML decoder to turn that back into a JSON string.  Notice that there is an MSI product key in this; that makes it specific to the channel that you downloaded (I am using the stable channel):

{“distribution”:{“msi”:true,”system_level”:true,”verbose_logging”:true,”msi_product_id”:”DCF62978-E764-38B6-8D70-FD4BFF0EDEE5″,”allow_downgrade”:false}}

  • Add your value to the string (no spaces or line breaks – ignore the wrapping below) to change it to:

{“distribution”:{“msi”:true,”system_level”:true,”verbose_logging”:true,”msi_product_id”:”DCF62978-E764-38B6-8D70-FD4BFF0EDEE5″,”allow_downgrade”:false,”do_not_create_desktop_shortcut”:true}}

  • Then re-encode that:

%7B%22distribution%22%3A%7B%22msi%22%3Atrue%2C%22system_level%22%3Atrue%2C%22verbose_logging%22%3Atrue%2C%22msi_product_id%22%3A%22DCF62978-E764-38B6-8D70-FD4BFF0EDEE5%22%2C%22allow_downgrade%22%3Afalse%2C%22do_not_create_desktop_shortcut%22%3Atrue%7D%7D

  • Now you’re ready to create the transform.  The steps in the ServerFault article work well, replacing Chrome with Edge as appropriate:
  1. Start Orca.
  2. Open the downloaded Edge for Business MSI file, MicrosoftEdgeEnterpriseX64.msi.
  3. On the Transform menu, select New Transform. Now all of the Windows Installer database tables are editable because you are editing a new transform file.
  4. Select the Property table.
  5. Right-click in the Property column and click “Add Row”. Set the Property to MASTER_PREFERENCES, and set the Value to your URL-encoded JSON. This code will be applied during deployment and saved as the installation’s master_preferences file by the installer.
  6. Select the CustomAction table, and locate the BuildInstallCommand action.
  7. Double-click the Target cell for the BuildInstallCommand action to make it editable.
  8. Near the end of the text, delete the existing encoded JSON following installerdata= and replace it with the new property name in brackets. Be sure to retain the closing quotation mark. It should look like this: installerdata=[MASTER_PREFERENCES]"
  9. Press Enter to finish editing the cell.
  10. On the Transform menu, click Generate Transform… and save the new MST file, e.g. MicrosoftEdgeEnterpriseX64.mst.
  11. Exit Orca.

Now you can deploy Edge with that transform, using a command line like so:

msiexec.exe /i MicrosoftEdgeEnterpriseX64.msi TRANSFORMS=”MicrosoftEdgeEnterpriseX64.mst” /L*v %temp%\msedgeenterprise_installer.log

You can translate that into what’s needed for Intune (as a Win32 app), ConfigMgr, or MDT yourself.  I’ve attached the transform itself to the bottom of this article.  (Note again that it will likely only work to install the stable version; you would need to edit the MSI product ID for other channels/architectures.)

File: MicrosoftEdgeEnterpriseX64.zip

p.s. Enable the “Send feedback” button in Edge and send the Edge team a request to make this easier. Or better yet, to not do this in their enterprise installer by default.

Categories: Windows 10

22 replies »

  1. Tnx for the post! This is indeed an headache…. the solution is nice but one issue I have with it is the fact that you can’t use the Line Of Business way of deploying the MSI application because it has become a multi file MSI. The LOB MSI deployment is so stable and simple I rather use that over the Win32 app deployment in Intune. Would be lovely if multi file msi’s as a LOB app were possible….

    Liked by 1 person

  2. Thanks for providing this solution.
    Would you please be so kind and forward a feature-request to the Edge-Team, to add a public DO_NOT_CREATE_DESKTOP_SHORTCUT Property do the MSI-Files? Sure, we could hardcoded override the Install-Command as you described, but this is what Public-MSI-Property Variables are for.

    Liked by 1 person

  3. Ish…. That product ID code changes for each MSI it looks like. Will have to make that edit for each version of the msi you deploy.

    Code above is for 80.0.361.48. Version 79.0.309.71 uses 8061116E-DD27-34F8-A5C9-3361222BD2C8.

    We use a post script that removes the public desktop shortcut and adds the no desktop element to master_preferences. Precisely due to usage of that code.

    From what I can tell, that code isn’t changed when the client autoupdates. Been tempting to test what happens if we just overwrite it…

    Soapbox time (I know Michael you don’t create the installer): IMO master_preferences shouldn’t have installation data like that. Should just contain application config to be used no matter version/type of installation. From what I remember this is how chromium used it. Our deployments of chrome installed the latest version and just dropped our generic master_prefs file down. We could keep our deployments automated this way.

    I requested a method to prevent desktop shortcuts to the Edge AMA, sounds like they might be working on a policy or something.

    Liked by 2 people

  4. Thanks for this post! It inspired me to play around with Orca a little bit. I discovered that if you delete the BuildInstallCommand row, and recreate it using the same properties with the modified Target property, you don’t have to use the transform file. It will embed the “do_not_create_desktop_shortcut” right in the MSI. This helps for deploying via MDT and Group Policy.

    Like

  5. Thanks Michael, this is really helpful!

    I have to admit that I cheated a fair amount and went about using powershell:

    start-process “MicrosoftEdgeEnterpriseX64.msi” -Wait
    $edgeprefs = Get-Content -Path “C:\Program Files (x86)\Microsoft\Edge\Application\master_preferences”
    $prefsindex = $edgeprefs.IndexOf(“}”)
    $edgeprefs = $edgeprefs.Substring(0,$prefsindex)
    $edgeprefs = $edgeprefs + ‘,”do_not_create_desktop_shortcut”:true}}’
    Set-Content -Path “C:\Program Files (x86)\Microsoft\Edge\Application\master_preferences” -Value $edgeprefs -Force

    Liked by 2 people

    • I never managed to get master_preferences to be used – even when present, it would still create the shortcut. Although when I look at the file (which will already have do_not_create_desktop_shortcut in it from the MSP file), I do see that it has an unexpected bytemark at the beginning of the file. Your method would keep that bytemark. I’ll try that out when I get a chance.

      Like

  6. I was able prevent the initial desktop shortcut and taskbar pin using these instructions but I can’t seem to disable the taskbar pin for new users. My C:\program files (x86)\microsoft\edge\application\master_preferences shows “do_not_create_taskbar_shortcut”:true but it’s still being added for new users. What am I missing?
    {“distribution”:{“msi”:true,”system_level”:true,”verbose_logging”:true,”msi_product_id”:”4D4DBD27-95C0-31BB-BECA-A1A5AB6D5E87″,”allow_downgrade”:false,”do_not_create_desktop_shortcut”:true,”do_not_create_taskbar_shortcut”:true}}

    Like

    • Never mind. I was able to prevent the taskbar pin for new users/first launch via “create_all_shortcuts”: true.

      Like

      • I lied. “create_all_shortcuts:false” does not prevent taskbar pin from being added during first launch.

        Like

  7. I am wondering if the easiest way would be to delete the ActiveSetup entry “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\{9459C573-B17A-45AE-9F64-1857B5D58CEE}”

    StubPath=”C:\Program Files (x86)\Microsoft\Edge\Application\80.0.361.57\Installer\setup.exe” –configure-user-settings –verbose-logging –system-level

    Thing is, I don’t know what else is done here…

    Like

  8. As anyone been able to build edge chrome into your gold image and not have it not get the old edge logo after deployment? My gold image has new edge installed, set as the default for 1909 but once I deploy the image the old edge logo is back in the task bar

    Like