2017-09-30 15 views
12

最新のバージョンであり、最新バージョンのアプリケーションをサポートしないため、データベースの移行が失敗した場合、ClickOnceを使用して公開された以前のバージョンのC#アプリケーションを復元します。データベース移行失敗(ClickOnce)の前の状態を復元する

詳細

私は、インターネットが利用できない遠隔地域でローカルに使用されるアプリを開発しています。インターネットを何とかして、毎回自分のアプリを更新してから、ローカルネットワークにアプリをデプロイします。そこからすべての人が更新版のアプリを入手できます。私が今したいのは、このアプリケーションを使用してデータベースの移行を使用し、アプリケーションが失敗した場合です。以前のバージョンに復元する必要があります。私はすでにFluentMigratorをデータベースの移行に使用しており、ClickOnceを使ってアプリケーションをデプロイしました。私はまた、どのように私がそれを行うことができるかを見るためにここにほとんどすべてのリンクを行ってきました。私は今、ClickOnceを使用することができないことを知っています。誰かが私に何か他の方法を教えてもらえますか、何らかのハックかもしれませんか?私はその自動更新機能のためにClickOnceを使用していますので、実際にその機能を失いたくはありません。どんな助けもありがとう。

+0

このデータベースを使用していますか?挿入するSQLクエリを使用していますか? –

+0

私はSQLサーバを使用しています。移行のために私はFluentMigratorを使用しています。何とか失敗した場合、私は以前のバージョンのアプリに復元したいと思う。私はコントロールパネルを使ってそれを行うことができることを知っている。しかし、どのようにアプリからそれを制御するには? –

+0

70 upvotesの答えはあなたのために働かないのですか? https://stackoverflow.com/questions/199348/how-can-i-roll-back-a-clickonce-application –

答えて

1

FluentMigratorは、データベースの現在のバージョンを追跡します。また、現在のバージョンのアプリケーションで最新のバージョンを追跡します。 Migrator機能を実行し、最新バージョンのMigrationファイルがデータベースに格納されている最新バージョンと等しいかどうかを確認します。両方が等しい場合、移行は成功しました。それらが等しくない場合は、cmdコマンドを実行して、コントロールパネルのウィンドウを直接開くか(削除またはバックアップ)、以前のバージョンに移動できます。これは、ClickOnceを使用して以前のバージョンに戻すためにできる最善の方法です。

try { 
    new MigrationsWrapper(AppManager.ConnectionString).MigrateToLatestVersion(); 
} 
catch (Exception ex) 
{ 

} 
LatestVersionNumber = new MigrationsWrapper(AppManager.ConnectionStringADO).LatestVersionNumber; 
CurrentVersionNumber = new MigrationsWrapper(AppManager.ConnectionStringADO).CurrentVersionNumber; 
if (LatestVersionNumber > CurrentVersionNumber) { 

string applicationName = ConfigurationManager.AppSettings["ApplicationName"].ToString(); 
string uninstallString = GetUninstallRegistryKeyByProductName(applicationName); 
if (uninstallString != string.Empty) { 
     System.Diagnostics.Process process = new System.Diagnostics.Process(); 
     System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
     startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
     startInfo.FileName = "cmd.exe"; 
     startInfo.Arguments = "/c " + uninstallString; 
     process.StartInfo = startInfo; 
     process.Start(); 

} 
} else { 
// Successfull 
} 
+0

ハッキーだが動作する。 –

1

したがって、実行中に問題が発生した場合は、以前のバージョンのアプリケーションを実行します。

私はClickOnceの解決策を知らないが、それに類似している - Squirrel。 リスもストレートな解決策はないが、それはphisically以前のバージョンのアプリケーションを格納し、それを実行することができます(私はちょうど私のアプリでそれをチェック)悪い知らせ。

ので、戦略があります:リスに

  1. 移行(彼らはそれのためa toolを持っている)緊急の場合は
  2. - 保存された以前のバージョンにCALCパスし、それを実行します。相対パスは "../app-1.1.1/myApp.exe"のようにする必要があります。

ただし、留意すべき点が1つあります。リスはそれからアプリをアップグレードした場合にのみ以前のバージョンを保存します。最初のインストール後には、以前のバージョンはありません。

幸運。

+0

ジェームズが提案したとおり、一度クリックすれば同じことができます。まだ別のツールを提案してくれてありがとう。 –

0

説明から、異なるバージョンのアプリケーションが1つのデータベースを共有しています。アプリケーションの新しいバージョンがマシン上で稼働しているので、共有データベースをパッチ/移行する必要があります。それが失敗すると、アプリケーションはインストールされません。それもデータベースを壊すことなく失敗することを望みましょう。

クリックイベントがあります。カスタムインストーラを作成するかもしれません。

https://msdn.microsoft.com/en-us/library/system.deployment.application.applicationdeployment_events.aspx

https://msdn.microsoft.com/en-us/library/system.deployment.application.applicationdeployment.aspx

出版ClickOnceアプリケーション https://msdn.microsoft.com/en-us/library/748fh114.aspx

チュートリアル:ClickOnceアプリケーションのカスタムインストーラを作成する https://msdn.microsoft.com/en-us/library/dd997001.aspx

便利です希望。

+0

さまざまなバージョンのアプリケーションが独自のデータベースを実行しています。 –

関連する問題