How to set configuration in your Universal Windows Application through MDM

One thing I hear over and over again when talking to (enterprise) developers is that they struggle with configuration management for UWP applications. In the past they just edited a app.config (or web.config) file on the machines to point an app to a test, acceptance or production environment. In UWP we have a app.config file as well but it’s hidden away in some obscure directory protected by some more restricted ACL.

We do have a solution to configure applications through MDM. It’s pretty bad documented though (which is something we will improve) but I needed to figure this out anyway so I thought I should share my findings.

As you might know we have this concept of data or settings folders in UWP. This is a special place in isolated storage where you can store settings, temporary files, settings which roam, but also configuration. The last one isn’t documented anywhere on MSDN but it does exist. There is a folder called “Managed.App.Settings” which will be created by the system if the MDM server sends out the configuration. I will talk about how to do that a little bit later.

This is how the code looks like to retrieve the configuration inside of your application:

ApplicationDataContainer localSettings;
const string ENTERPRISE_CONTAINER_NAME = "Managed.App.Settings";
const string ENTERPRISE_SETTINGS_WELCOME = "Welcome";
object value = null;

localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
if (localSettings.Containers.TryGetValue(ENTERPRISE_CONTAINER_NAME, out enterpriseContainer))
{
  if (enterpriseContainer.Values.TryGetValue(ENTERPRISE_SETTINGS_WELCOME, out value))
  {
    txtInfo.Text = value.ToString();
  }
  else
  {
    txtInfo.Text = "No settings found";
  }
}
else
{
  txtInfo.Text = "ENTERPRISE_SETTINGS_CONTAINER_NOT_FOUND";
}

So the code is pretty simple. You try to open up the configuration container. If it is available you retrieve the value, in our example it is ‘Welcome’.

But how do I get this configuration in my system? I got it to work through InTune but every MDM tool should be able to do this. This is done through our EnterpriseModernAppManagement CSP

If you login at https://manage.microsoft.com you go to Policy, Configuration Policies. Click Add, Select Windows\Custom Configuration.

image

You can specify a name and description in the next screen. Save the policy. The next piece is adding the configuration part. So at the OMA-URI Settings section click add. The screen looks like this:

image

You specify a name and a data type. The OMA-URI string needs to be the following for configuration: ./User/Vendor/MSFT/EnterpriseModernAppManagement/AppManagement/AppStore/3441ffd3-6b54-48b0-ac86-accdd148ea0f_f6s3q6fqr0004/AppSettingPolicy/Welcome

And specify a value of your setting in the Value textbox.

The last part if the name of you setting which you use in your code as well. In this sample it’s called Welcome. That translates back to the value we try to get in the Managed.App.Settings container.

The string after the /AppStore/ is the familypackageID you can get from your manifest. That’s how the system knows for what app it needs to store the settings data and in what location.

That’s all. You can have different type of settings, if you need a lot of data you can select the XML value type.

So next step is to try to get this working through the WMI bridge as well. Once I got that to work you should be able to run a powershell script or console app on your desktop to set this configuration as well. I believe that will help you when you have automatic builds, and test deployments in your environment.

Comments

Comment by Aster Veigas on 2016-12-03 10:19:05 -0800

Hi,

Is there an event to get notified in my UWP app for an MDM configuration?

Comment by Matthijs Hoekstra on 2017-02-27 18:12:51 -0800

Not that I am aware off, so you have to poll regularly or during startup to get the updated values