2008-10-27 2 views
4

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

ответ

7

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

+0

Этот звук сумасшедший, но после нескольких часов поиска я пришел к выводу, что это правда. Чтобы откат, вам нужно выпустить предыдущие двоичные файлы с более высоким номером версии ... – Thomas 2017-11-06 11:03:20

2

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

+0

Какие-нибудь примеры могут быть? – 2011-12-01 12:18:55

0

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

Посмотрите на эту ссылку, чтобы увидеть, как это может быть сделано в коде: ClickOnce and Expiring Code Signing Certificates

0

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

Приведенный ниже код попытается откат «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 }); 
      } 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^