clickOnceアプリケーションマニフェストでminimumRequiredVersionを使用することにしました。ユーザーがアプリケーションを起動したときに以前のバージョンにロールバックしようとすると、起動に失敗します。アプリケーションマニフェストのバージョンが必要なバージョンよりも前であり、ユーザーはアプリケーションを使用できないと表示されます。minimumRequiredVersionを使用してもこの問題は発生しませんでしたが、これを使用したいと思います。
emilam
質問する
3372 次
4 に答える
8
より高いバージョン番号の新しいバージョンをデプロイする必要があります。組み込みのロールバック機能はありません。
于 2008-10-27T22:11:44.287 に答える
2
Mage.exe を使用して配置マニフェスト (.application ファイル拡張子) を新しいバージョンに更新し、以前のバージョンのアプリケーション マニフェストを選択できます。chilltemp が言ったように、より高いバージョンに移行する必要がありますが、コードを再デプロイする必要はありません。
于 2008-11-07T21:37:35.643 に答える
0
これは、発行元の 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 });
}
}
}
}
于 2012-07-01T13:22:35.290 に答える