Problems with ClickOnce Deployments
June 21st, 2009
I’ve been fighting problems with my ClickOnce deployment. I’ve got an app that has 23 successful updates. Number 24 didn’t go as well. I started making major changes almost a month ago and I finished up a couple of the last minor fixes yesterday. The deployment uploaded fine, but it would not install on either my XP development machine or my Vista test platform. In the end, it was a couple simple changes to the app.manifest file. A some point, I had played with the ClickOnce settings. This messing about added extra info to the XML file and reverting back to “Full Trust” didn’t remove these edits.
Here’s the mainfest before I found a solution.
<?xml version="1.0" encoding="utf-8"?>
<asmv1 :assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyidentity version="1.0.0.0" name="MyApplication.app" />
<trustinfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedprivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedexecutionlevel level="requireAdministrator" uiAccess="false" />
<requestedexecutionlevel level="highestAvailable" uiAccess="false" />
If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node.
-->
<requestedexecutionlevel level="asInvoker" uiAccess="false" />
</requestedprivileges>
<applicationrequestminimum>
<defaultassemblyrequest permissionSetReference="Custom" />
<permissionset class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="none">
<ipermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
<ipermission class="System.Security.Permissions.KeyContainerPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
<ipermission class="System.Security.Permissions.StorePermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
<ipermission class="System.Net.WebPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
<ipermission class="System.Diagnostics.EventLogPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
<ipermission class="System.Data.OleDb.OleDbPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
<ipermission class="System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
<ipermission class="System.Security.Permissions.DataProtectionPermission, System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" version="1" Unrestricted="true" />
</permissionset>
</applicationrequestminimum>
</security>
</trustinfo>
</asmv1>
So here’s the complete working manifest file.
< ?xml version="1.0" encoding="utf-8"?>
<asmv1 :assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyidentity version="1.0.0.0" name="MyApplication.app" />
<trustinfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedprivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedexecutionlevel level="requireAdministrator" uiAccess="false" />
<requestedexecutionlevel level="highestAvailable" uiAccess="false" />
If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node.
-->
<requestedexecutionlevel level="asInvoker" uiAccess="false" />
</requestedprivileges>
</security>
</trustinfo>
</asmv1>
