Wie kann ich ein Rollback, wenn ich eine Clickonce minimal erforderliche Version?

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

  •  04-07-2019
  •  | 
  •  

Frage

Wir haben uns entschieden, die minimumRequiredVersion in unserem Clickonce-Anwendung manifestieren zu verwenden, und jetzt, wenn wir versuchen, zu einer früheren Version rückgängig zu machen, wenn der Benutzer die Anwendung startet es nicht anspringt. Er sagt, die Anwendung manifestieren eine frühere Version als die erforderliche Version hat und der Benutzer kann die Anwendung nicht verwenden. Wir haben nicht dieses Problem withou der minimumRequiredVersion, aber wir möchten, dass verwenden.

War es hilfreich?

Lösung

Sie haben eine neue Version mit einer höheren Versionsnummer bereitstellen. Es gibt keine in Rollback-Funktion eingebaut ist.

Andere Tipps

Sie können Mage.exe benutzen, um Ihr Bereitstellungsmanifest (.application Dateierweiterung) auf eine höhere Version zu aktualisieren, und wählen Sie die Anwendung Manifest der vorherigen Version. Wie chilltemp sagte, Sie immer noch auf eine höhere Version gehen, aber Sie haben nicht Ihren Code erneut bereitstellen.

Wenn Sie die Version zu einem früheren vor dem Kunden mindestens erforderliche Version rückgängig zu machen wollen, dann müssen Sie die Clickonce-Anwendung neu zu installieren.

Werfen Sie einen Blick auf diesen Link, um zu sehen, wie es im Code getan werden kann: Clickonce und Auslaufende Code Signing Zertifikate

Dies kann durch Reflexion erfolgen, wenn Sie den Verlag uri und den Namen, die Version Sprache Public-Key-Token und Prozessorarchitektur sowohl der Einsatz und die Anwendung kennen.

Der Code unten wird versuchen, die „coolapp.app“ klicken Sie einmal App rückgängig zu machen. Wenn es nicht zurückrollen kann, werden versuchen, es zu deinstallieren.


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 });
            }
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top