最低限必要なバージョンがある場合、どうすればclickOnceをロールバックできますか?

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

  •  04-07-2019
  •  | 
  •  

質問

clickOnceアプリケーションマニフェストでminimumRequiredVersionを使用することにしました。ユーザーがアプリケーションを起動したときに以前のバージョンにロールバックしようとすると、起動に失敗します。アプリケーションマニフェストには必要なバージョンより前のバージョンがあり、ユーザーはアプリケーションを使用できないと書かれています。 minimumRequiredVersionなしではこの問題はありませんでしたが、それを使用したいと思います。

役に立ちましたか?

解決

より高いバージョン番号の新しいバージョンを展開する必要があります。組み込みのロールバック機能はありません。

他のヒント

Mage.exeを使用して、展開マニフェスト(.applicationファイルの拡張子)をより高いバージョンに更新し、以前のバージョンのアプリケーションマニフェストを選択できます。 chilltempが言ったように、さらに高いバージョンに移動する必要がありますが、コードを再デプロイする必要はありません。

クライアントの最小必要バージョンより前のバージョンにロールバックする場合は、clickonceアプリケーションを再インストールする必要があります。

このリンクを見て、コードでの実行方法を確認してください: ClickOnceおよび期限切れのコード署名証明書

これは、発行元のURIと、展開とアプリケーションの両方の名前、バージョン言語公開キートークン、およびプロセッサアーキテクチャがわかっている場合、リフレクションを介して実行できます。

以下のコードは、「coolapp.app」をロールバックしようとします。アプリを1回クリックします。ロールバックできない場合、アンインストールを試みます。


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