Мы решили использовать minimumRequiredVersion в нашем манифесте clickOnce, и теперь, когда мы пытаемся откат к предыдущей версии, когда пользователь запускает приложение, он не запускается. Он говорит, что манифест приложения имеет более раннюю версию, чем требуемая версия, и пользователь не может использовать приложение. У нас не было этой проблемы с минимальнойRequiredVersion, но мы хотели бы использовать это.Как я могу отменить clickOnce, если у меня есть минимальная требуемая версия?
ответ
Вам необходимо развернуть новую версию с более высоким номером версии. Нет встроенной функции отката.
Вы можете использовать Mage.exe, чтобы обновить манифест развертывания (расширение файла .plipication) до более высокой версии и выбрать манифест приложения предыдущей версии. Как и chilltemp, вам все равно нужно перейти к более высокой версии, но вам не нужно повторно развертывать свой код.
Какие-нибудь примеры могут быть? – 2011-12-01 12:18:55
Если вы хотите отменить версию до предыдущей до минимальной требуемой версии клиента, вам потребуется переустановить приложение clickonce.
Посмотрите на эту ссылку, чтобы увидеть, как это может быть сделано в коде: ClickOnce and Expiring Code Signing Certificates
Это может быть сделано с помощью отражения, если вы знаете издателя Ури и название, версия языка маркер открытого ключа и процессора архитектуры как развертывание, так и приложение.
Приведенный ниже код попытается откат «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 });
}
}
}
}
Этот звук сумасшедший, но после нескольких часов поиска я пришел к выводу, что это правда. Чтобы откат, вам нужно выпустить предыдущие двоичные файлы с более высоким номером версии ... – Thomas 2017-11-06 11:03:20