2008-10-27 4 views
4

clickOnce 응용 프로그램 매니페스트에서 minimumRequiredVersion을 사용하기로 결정했습니다. 이제 사용자가 응용 프로그램을 시작할 때 이전 버전으로 롤백하려고하면 시작되지 않습니다. 응용 프로그램 매니페스트가 필요한 버전보다 이전 버전을 가지고있어 사용자가 응용 프로그램을 사용할 수 없다고합니다. minimumRequiredVersion과 함께이 문제가 발생하지 않았지만이를 사용하고 싶습니다.필요한 최소 버전이있는 경우 어떻게 clickOnce를 롤백 할 수 있습니까?

답변

7

더 높은 버전 번호로 새 버전을 배포해야합니다. 롤백 기능은 내장되어 있지 않습니다.

+0

이 미친 소리지만, 검색 몇 시간 후 나는 그것이 사실이라는 결론에 도달했습니다. 롤백하려면 더 높은 버전 번호로 이전 바이너리를 릴리스해야합니다. – Thomas

2

Mage.exe를 사용하여 배포 매니페스트 (.application 파일 확장명)를 상위 버전으로 업데이트하고 이전 버전의 응용 프로그램 매니페스트를 선택할 수 있습니다. chilltemp가 말했듯이 여전히 높은 버전으로 가야하지만 코드를 다시 배포 할 필요는 없습니다.

+0

예를 들면? –

+0

롤백하려는 폴더 _v_ {0} _ {1} _ {2} _ {3} 폴더의 복사본을 만들고 * 얻으려는 버전 번호보다 # 높은 버전으로 지정해야합니다 그런 다음 MageUI (또는 MageUI)를 사용하여 먼저 ClickOnce 루트 *에서 .application 파일 *을 가리키고 버전 번호를 변경하고 새 폴더의 .manifest 파일을 가리 키도록하고, 저장하십시오. 나에게도 신청서에 서명해야했다. "다운 그레이드"가 작동했지만 ** 이전 앱 설정을 읽지 않아이 방법을 사용할 수 없게되었습니다 **. (내가 틀린 일을했는지는 확실치 않지만, 그게 딜 브레이커 다.) –

0

클라이언트 최소 요구 버전 이전 버전으로 롤백하려는 경우 clickonce 응용 프로그램을 다시 설치해야합니다. 당신의 게시자 URI와 이름, 버전 언어 공개 키 토큰 및 프로세서 아키텍처를 알고있는 경우 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 }); 
      } 
     } 
    } 
} 
관련 문제