Changing the Start Up App on Windows 10 IoT Core
Changing the start up application on your IoT device running Windows IoT Core seems to be a common requirement once the device is out in the field so I hope this post exploring a few different ways of doing this will be of value to people.
To clarify the behaviour we will achieve below is from device power on our Windows 10 IoT Core operating system will boot up. But instead of starting the default application which is originally named ‘IoTCoreDefaultApp’ we will load our own custom created UWP app executable file. I will not talk about deploying your UWP app to the device, the assumption here is that has already been done and a complied .EXE file is living on the devices local storage.
Application & Package Name
Before diving into any changes it’s worth taking a moment to figure what our UWP application is called. This might seem obvious but depending on how you make this change (via the web portal or PowerShell) it’s referred to by different names. Both are configured in Visual Studio under the Package.AppxManifest and do not have to be the same. See below with screen shots from a new vanilla UWP project.
- Firstly, the application name which is the friendly display name given to solution on creation and the EXE file presented in the settings web portal.
- Secondly, the package name which is the not so friendly value (defaulted as a GUID) is used as a prefix for the package family name. This is what PowerShell uses and needs to be exact.
Assumed you’ve navigated that mine field and you know what your UWP app is called depending on the context where its used lets move on.
Headed vs Headless
Sorry, a tiny bit more detail to gain an appreciation of before we actually do this. Start up apps here can take 2x different forms; headed or headless. The difference between them is best thought of as running in the background or running in the foreground. With the foreground apps being visual via the devices display output.
- Headed = foreground. Visible via display.
- Headless = background. Not visible, like a Windows service. Also you have no head 🙂
Choose as required and be mindful that you can only have one of each running.
Ok, the easy way to make this change and make your app start up post OS boot: navigate to your devices IP address and authenticate against the web portal. Here in the Apps section you’ll find anything currently deployed to your Windows IoT Core system. Under the Startup field in the Apps table simply click the application you now want to start after the operating system has booted up using the Set as Default App link.
At the point of making this selection the table content will refresh to reflect the change and the application will also start running.
You can now restart you device and your app will load without any further intervention.
Given the ease of the above why would you want to use PowerShell Paul? Well if you’ve got to do this on mass for 30x devices you’ll want to script things. Or, as I found out when Windows 10 IoT Core was still in preview for the Raspberry Pi 3 the App panel in the web portal above had a bug and just didn’t display anything!
Moving on, create yourself a remote management session to your IoT device. If your unfamiliar with doing this the IoT Dashboard can help. Check out my previous blog post Controlling Your Windows 10 IoT Core Device for guidance.
Within the remote management session you’ll need the command IoTStartUp. When using a new command for the first time I always like to add the help switch /? to check out what it can do.
Next work through the following commands in your PowerShell session.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
## 1. ## Review the list of apps currently available on your device. IoTStartUp List ## If your expected app isn't there then it hasn't been deployed to the device. ## 2. ## Copy the package family name from the list or from Visual Studio if you still have it open. ## 3. ## Set the app as headed using the following command. IoTStartUp Add Headed YOURAPPFAMILYNAME ## 4. ## To confirm which apps are now set for startup use: IoTStartUp Startup
Here’s the same thing in a PowerShell window just to be clear.
Again to prove this you can now restart the device. From PowerShell use shutdown -r.
Restoring the Start Up Default
To change this back to the default application either repeat the above PowerShell steps for the package family name IoTCoreDefaultApp_1w720vyc4ccym!App or in the web portal set the app name IoTCoreDefaultApp as the default.
Many thanks for reading