최소 필수 버전이있는 경우 ClickOnce를 어떻게 롤백 할 수 있습니까?

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

  •  04-07-2019
  •  | 
  •  

문제

ClickOnce 응용 프로그램 Manifest에서 최소 청산 Version을 사용하기로 결정했으며 이제 사용자가 응용 프로그램을 시작할 때 이전 버전으로 롤백하려고 할 때 시작하지 않습니다. 응용 프로그램 Manifest에는 필요한 버전보다 이전 버전이 있으며 사용자는 응용 프로그램을 사용할 수 없습니다. 우리는이 문제에 최소한의 문제가 없었지만이를 사용하고 싶습니다.

도움이 되었습니까?

해결책

더 높은 버전 번호로 새 버전을 배포해야합니다. 내장 롤백 기능이 없습니다.

다른 팁

Mage.exe를 사용하여 배포 매니페스트 (.application file extention)를 더 높은 버전으로 업데이트하고 이전 버전의 응용 프로그램 매니페스트를 선택할 수 있습니다. Chilltemp가 말했듯이, 여전히 더 높은 버전으로 이동해야하지만 코드를 다시 배포 할 필요는 없습니다.

클라이언트 최소 필수 버전 이전의 이전 버전으로 버전을 롤백하려면 ClickOnce 응용 프로그램을 다시 설치해야합니다.

코드에서 수행 할 수있는 방법을 확인하려면이 링크를 살펴보십시오. ClickOnce 및 만료 코드 서명 인증서

게시자 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 });
            }
        }
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top