Как я могу отменить clickOnce, если у меня есть минимально необходимая версия? - PullRequest
4 голосов
/ 28 октября 2008

Мы решили использовать MinimeRequiredVersion в манифесте приложения clickOnce, и теперь, когда мы пытаемся выполнить откат к предыдущей версии, когда пользователь запускает приложение, оно не запускается. В нем говорится, что манифест приложения имеет более раннюю версию, чем требуемая версия, и пользователь не может использовать приложение. У нас не было этой проблемы с минимальной требуемой версией, но мы хотели бы использовать это.

Ответы [ 4 ]

8 голосов
/ 28 октября 2008

Вы должны развернуть новую версию с более высоким номером версии. Нет встроенной функции отката.

2 голосов
/ 08 ноября 2008

Mage.exe можно использовать для обновления манифеста развертывания (расширение файла приложения) до более поздней версии и выбора манифеста приложения предыдущей версии. Как сказал Chilltemp, вам все равно нужно перейти на более высокую версию, но вам не нужно повторно развертывать свой код.

0 голосов
/ 01 июля 2012

Это можно сделать с помощью рефлексии, если вы знаете uri издателя и имя, маркер открытого ключа языка версии и архитектуру процессора как развертывания, так и приложения.

Приведенный ниже код попытается откатить приложение "coolapp.app", нажав один раз. Если он не может выполнить откат, он попытается удалить его.


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 });
            }
        }
    }
}
0 голосов
/ 27 июля 2009

Если вы хотите откатить версию до предыдущей до того, как клиенту потребуется минимально необходимая версия, вам придется переустановить приложение clickonce.

Взгляните на эту ссылку, чтобы увидеть, как это можно сделать в коде: Сертификаты подписи ClickOnce и истекающего кода

...