This can be done using reflection if you know the URI publisher and name, the public key public key token, and the processor architecture as the deployment and application.
The code below will attempt to cancel the "coolapp.app" ClickOnce application. If he cannot rollback, he will try to remove it.
using System; using System.Deployment.Application; using System.Reflection; namespace ClickOnceAppRollback { static class Program { /// <summary> /// The main entry point for the application. /// </summary> 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 Jun 28 2018-12-12T00: 00Z
source share