This can be done using reflection if you know the publisher uri and name, version public key token, and processor architecture for both deployment and application.
The code below will try to cancel the "coolapp.app" click once. If he cannot rollback, he will try to remove it.
using System; using System.Deployment.Application; using System.Reflection; namespace ClickOnceAppRollback { static class Program { /// /// The main entry point for the application. /// static void Main() { string appId = string.Format("{0}#{1}, Version={2}, Culture={3}, PublicKeyToken={4}, processorArchitecture={5}/{6}, Version={7}, Culture={8}, PublicKeyToken={9}, processorArchitecture={10}, type={11}", /*The URI location of the app*/@"http://www.microsoft.com/coolapp.exe.application", /*The application assemblyIdentity name*/"coolapp.app", /*The application assemblyIdentity version*/"10.8.62.17109", /*The application assemblyIdentity language*/"neutral", /*The application assemblyIdentity public Key Token*/"0000000000000000", /*The application assemblyIdentity processor architecture*/"msil", /*The deployment dependentAssembly name*/"coolapp.exe", /*The deployment dependentAssembly version*/"10.8.62.17109", /*The deployment dependentAssembly language*/"neutral", /*The deployment dependentAssembly public Key Token*/"0000000000000000", /*The deployment dependentAssembly processor architecture*/"msil", /*The deployment dependentAssembly type*/"win32"); var ctor = typeof(ApplicationDeployment).GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[] { typeof(string) }, null); var appDeployment = ctor.Invoke(new object[] { appId }); var subState = appDeployment.GetType().GetField("_subState", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(appDeployment); var subStore = appDeployment.GetType().GetField("_subStore", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(appDeployment); try { subStore.GetType().GetMethod("RollbackSubscription").Invoke(subStore, new object[] { subState }); } catch { subStore.GetType().GetMethod("UninstallSubscription").Invoke(subStore, new object[] { subState }); } } } }
Hasani Blackwell Jul 01 2018-12-12T00: 00Z
source share