User roaming profile ClickOnce application restore
Tags: clickonce, roamingprofiles, restore, windows10
Published: 2019-02-06 16:03:47

---
title: User roaming profile ClickOnce application restore
published: false
tags: ClickOnce, Roaming Profiles, Restore, Windows 10
canonical_url: http://coopsblog.wales/blog/viewblog/User-roaming-profile-ClickOnce-application-restore
published: true
---

I know Officially Click Once does not support User roaming profiles, but not support does not mean that you can create a work around and this is my work around.  
My solution is an application that sits outside the Click once application in a safe modifiable area. I’m using the C:\ProgramData folder. This application then get invoked by the Click once application to make a backup copy of its binaries and the linked registration elements within the user’s registration data. Once completed it then takes a copy of the original short cut and add its own short cut to the user desktop. Now the user will use this application to invoke the original Click Once application.  
When the solution is invoked, it will check if a recovery is needed and then invoked the original Click Once application.  
Full example in the example application on my GitHub repo. Use it, improve it or just use it as an starting point  
  
  
The application   
This application is split into two main elements; backup and recovery. You’re initial Click once application will initialise the required data and then invoke the application in backup mode.    
Within the backup mode is split into two elements; binaries and registration data. When it backup the binaries it finds the original short cut link for the user on the desktop and replaces it with a link to itself.  
The user will use the new link to open the original click once application, but as the link has been changed to invoke the recovery application. The recovery application will check if the AppData and registration data is already present, if not it will restore these and then invoke the original application as a click once application.  
_Full example in the example application on my [GitHub repo](%E2%80%9D). Use it, improve it or just use it as an starting point_  
  
Application data   
First thing you need to initialise the recovery application from your original click once application. Below is an example code that shows what is needed.  

{% gist https://gist.github.com/chriscooper01/bb9b4b86668eeca3b605d44b11cb7274 %}



This data can be set from your initial click once application, using the simple code snippet below.  
  
{% gist https://gist.github.com/chriscooper01/e32472c7a9869e353f27c562283ef507 %}

Backup binaries  
When the backup mode is invoked it will find the required application folders using **ClickOnceLocation** and **FolderStartsWith** value to find the required folders. These files are then copied to the **RecoveryLocation** location. It will copy the folders in the same structure.  
Once the binaries have been collected it will get the manifest files from the manifest folder, copying all the files starting with **FolderStartsWith**. (_This is used as it will be the same in both cases_)  
Now you need to get the Click once shortcut (file) and place it in the restore location. The application will look at the user desktop for a file that start with the **ShortCurtStartsWith**. This is needed as this is the key to make sure it uses the Click once logic. (_This short cut is not a normal short cut, its a “.appref-ms” file_)  
The final part of this is to make sure there is a short cut to itself and it will use the **ShortCurtDisplay** value to set the display name.   
  
Backup registration  
The click once application will not work, making a binary backup and then restoring only. Click once requires user’s registration data as well.  
You do need to get all the data from the below registration location, linked to your application.  
  
Software\Classes\Software\Microsoft\Windows\CurrentVersion\Deployment\SideBySide\2.0  
  
  
Invoke  
The original shortcut for your application has now has been replace with a short cut to this application. So once invoked it find out if it needs to restore or just invoke the application as normal.  
  
Restore  
As the user now uses this application to invoke their application, due to the new short cut. It will check if the Current folder is within the Click once location. If not present it will restore the registration and physical folders.   
  
**Registration**  
This will restore the users registration keys and values required for your click once application to run again.  
The restore application will use the data collected from the backup and restore the registration to match, what it was at the below registration location.  
_Full example in the example application on my [GitHub repo](%E2%80%9D)_  
  
\HKEY\_CURRENT\_USER\Software\Classes\Software\Microsoft\Windows\CurrentVersion\Deployment\SideBySide\2.0  
  
  
**Binaries**  
The backup folder and files are copied form the backup location to the below location.  
_Full example in the example application on my [GitHub repo](%E2%80%9D)_  
  
C:\Users\Chris.HEALTHDIAGNOSTI\AppData\Local\Apps\2.0 location