Como posso reverter Clickonce se eu tiver uma versão mínima necessária?

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

  •  04-07-2019
  •  | 
  •  

Pergunta

Nós decidimos usar o minimumRequiredVersion no nosso manifesto do aplicativo ClickOnce, e agora quando tentamos reverter para uma versão anterior quando o usuário inicia o aplicativo falhar para começar. Ele diz que o manifesto do aplicativo tem uma versão mais cedo do que a versão necessária eo usuário não pode usar o aplicativo. Nós não têm este problema withou a minimumRequiredVersion, mas gostaria de usar isso.

Foi útil?

Solução

Você tem que implantar uma nova versão com um número de versão superior. Não há como construído em função de reversão.

Outras dicas

Você pode usar Mage.exe para atualizar o seu manifesto de implantação (arquivo .application extensão) para uma versão superior, e selecione o manifesto do aplicativo da versão anterior. Como chilltemp disse, você ainda tem que ir para uma versão superior, mas você não tem que re-implantar seu código.

Se você quiser reverter a versão de um anterior antes da versão clientes mínimo exigido, então você terá que reinstalar o aplicativo clickonce.

Dê uma olhada neste link para ver como isso pode ser feito em código: ClickOnce e expiram Código Certificados de assinatura

Isto pode ser feito através da reflexão, se você sabe o URI editor e o nome, a linguagem versão pública chave arquitetura token e processador de ambos a implantação ea aplicação.

O código abaixo vai tentar reverter o clique "coolapp.app" uma vez aplicativo. Se ele não pode rolar para trás, ele vai tentar desinstalá-lo.


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 });
            }
        }
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top