Come posso eseguire il rollback di ClickOnce se ho una versione minima richiesta?

StackOverflow https://stackoverflow.com/questions/241541

  •  04-07-2019
  •  | 
  •  

Domanda

Abbiamo deciso di utilizzare il minimoRequiredVersion nel nostro manifest dell'applicazione clickOnce, e ora quando proviamo a ripristinare una versione precedente quando l'utente avvia l'applicazione non si avvia. Dice che il manifest dell'applicazione ha una versione precedente rispetto alla versione richiesta e l'utente non può utilizzare l'applicazione. Non abbiamo avuto questo problema con il minimoRequiredVersion, ma vorremmo usarlo.

È stato utile?

Soluzione

Devi distribuire una nuova versione con un numero di versione superiore. Non è disponibile una funzione di rollback integrata.

Altri suggerimenti

È possibile utilizzare Mage.exe per aggiornare il manifest di distribuzione (estensione del file .application) a una versione successiva e selezionare il manifest dell'applicazione della versione precedente. Come ha detto chilltemp, devi comunque passare a una versione successiva, ma non devi ridistribuire il tuo codice.

Se si desidera ripristinare la versione precedente a quella precedente ai client, è necessario reinstallare l'applicazione clickonce.

Dai un'occhiata a questo link per vedere come si può fare nel codice: ClickOnce e Certificati con firma del codice in scadenza

Questo può essere fatto tramite la riflessione se si conosce l'uri editore e il nome, il token di chiave pubblica della lingua della versione e l'architettura del processore sia della distribuzione che dell'applicazione.

Il codice seguente tenterà di ripristinare " coolapp.app " fai clic una volta sull'app. Se non è possibile ripristinare, proverà a disinstallarlo.


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's assemblyIdentity name*/"coolapp.app",
                /*The application's assemblyIdentity version*/"10.8.62.17109",
                /*The application's assemblyIdentity language*/"neutral",
                /*The application's assemblyIdentity public Key Token*/"0000000000000000",
                /*The application's assemblyIdentity processor architecture*/"msil",
                /*The deployment's dependentAssembly name*/"coolapp.exe",
                /*The deployment's dependentAssembly version*/"10.8.62.17109",
                /*The deployment's dependentAssembly language*/"neutral",
                /*The deployment's dependentAssembly public Key Token*/"0000000000000000",
                /*The deployment's dependentAssembly processor architecture*/"msil",
                /*The deployment's 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 });
            }
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top