2010-12-01 15 views
0

マニフェストファイルに従って、また各dllのバージョンを指定するftpサイトで、ftpサイトから新しいdllを取得してアプリケーションを更新するコードを書いています。基本的な考え方は、起動時にアップデータープログラムが実行され、ftpサイトのマニフェストをチェックし、アプリケーションで現在使用されているdllよりも新しいdllをダウンロードし、アプリケーションを起動してシャットダウンするというものです。ftpサイトのローカル/リモートアクセス同期

これは、私が扱う最良の方法がわからないという問題につながります。ftpサイトに新しいdllを入れたいとしますが、同時にupdaterアプリケーションのインスタンスはそれを読み込もうとしますdll。 dllを削除して新しいファイルをコピーすると、マニフェストにそのファイルがあるはずだと言っていても、アップデーターはファイルを見ることができません。

私は、同期オブジェクトとして動作し、存在Iとアップデータインスタンスがロックとして使用できますが、問題を動かすだけではない、マーカファイルのような考えがありますか?ロックがあるかどうかを確認してから、他の誰かがロックをとり、ftpファイルの修正を開始できるようにするまでには、まだ時間があります。さらに、マーカーを削除する前に一部のアップデータがクラッシュした場合、残ったマーカーを削除するかどうかを知らせる方法がありません。

編集:ファイルを別のフォルダにアップロードしてから名前を変更する方法もありました。名前の変更はftpのアトミック操作であるはずですが、名前を変更するだけです既存のフォルダ?既存のフォルダを最初に削除してはならないので、同じ問題が発生しますか?

これを解決する標準的な方法はありますか?

答えて

1

この方法について:FTPサーバーで、ファイル名にバージョン情報を含めます。クライアント上で、ダウンロード後にファイルの名前を変更します。

+0

ありがとうございました。私はそれがうまくいくと思う。マニフェストは使用するdllバージョンを指定するので、同時に2つのdllバージョンを持つことには問題ありません。新しいDLLがアップロードされたら、新しいマニフェストをサイトにコピーします。バージョン間のオーバーラップでは、最新のマニフェストバージョンであるクライアントを把握する必要がありますが、それはもちろん実行可能です。私は、私はもう少し簡単に何かをしていると思いますが、他の答えが来なければ、私はこれを受け入れます。 – Boris

+0

マニフェストを更新するのと同じ問題が残っていると私は思いましたが、恐らくそれは非常に小さいので、リスクはより小さくなります。おそらく、古いマニフェストを削除し、新しいDLLを更新し、新しいマニフェストをアップロードすることができます。現在古いDLLをダウンロードしているクライアントはすべてOKになり、新しいクライアントがマニフェストが見つからない場合は、10秒後に再試行できます。マニフェストをダウンロードした後、クライアントはファイルの終わりのマーカーがあるかどうか確認して、完全であることを確認することができます。 –

+0

私はそれについて考えていました。私はマニフェストを更新すべきだとは思わない。代わりに、マニフェスト名もバージョン管理する必要があります。クライアントは、最新のマニフェストを見つけて、それをダウンロードし、それと一緒に行くdllを開始することができます。古いマニフェストをダウンロードしたすべてのクライアントは、古いdllファイルをダウンロードしていましたが、現在のダウンロードは新しいバージョンのみになるため、古いバージョンは削除される可能性があります。新しいマニフェストが完全にアップロードされていることを確認するために、別の名前で作成して名前を変更することができます。 – Boris

関連する問題