0

.NETをベースにしたクライアントサーバーアプリケーションを開発しています。サーバー側はWindowsXPで実行され、クライアント側はWindows CEデバイスで実行されます(Motorola Symbol 3100、これは関連する可能性があります)。

クライアント側には自動更新機能が必要ですが、いくつかのトピックが原因で、すぐに使用できる自動更新ソリューションを使用できなかったため、自分で実装することにしました。私のアプリケーションは、起動するたびに更新をチェックし、LastModificationTimeによってリモートサイトのファイルを比較します。存在する場合は、リモートサーバーからtemp dirにファイルをダウンロードし、停止して別のアプリケーションを実行します。このアプリケーションは、更新されたファイルを置き換えて、メインアプリケーションを実行します。

ファイルはソケットを介してダウンロードされているため、ファイルがダウンロードされた後、アプリケーションはすべてのファイルのLastModificationTimeをリモートサイトが提供した値に設定します。私はこのトピックの時間変更ソリューションを使用しています。これはうまく機能します。つまり、これらのファイルの一部の比較は失敗しますが、ファイルの変更時間は完全に更新されます。私のソリューションで比較できないファイルがMotorolaSymbolDLLであることが関係している可能性があります。

問題は、私のすべての作業にもかかわらず、それらを比較するたびに、それらのシンボルファイルの変更タイムスタンプが異なることです。常に1時間異なります。たとえば、リモートサイトによると、ファイル時間は1/24/2012 5:13:08ですが、私のアプリケーション側では1/24/20126:13:08です。他のファイルにはまったく問題はありません。これらの「任意」とは、アプリケーションexe、DLL、サードパーティコンポーネント(OpenNETCFなど)によって提供されるDLL、MS.NET関連ファイルなどです。どちらも私を悩ませることはありません-それらが更新された場合、これは1回だけであり、実際に変更されていない場合は更新されません。比較中、私は常にToUniversalTime()を使用して、タイムゾーンに関連する違いが発生しないようにします(そして、前述したように、これは他のファイルでも機能します)。だから私はいつもこのような状況になります:

  • リモートサイトには多数のファイルがあり、その中には実際に変更されたファイル(アプリケーション、DLLなど)とそれらのシンボルDLLがあります(常に!)
  • ファイルがダウンロードされ、更新されます
  • アプリケーションが再度実行され、更新を再度確認します
  • シンボルDLLのみが変更として報告されるようになりました
  • シンボルDLLの変更時間は常に1時間異なるため、アプリケーションは無限ループに陥ります。

シンボルファイルのファイルタイムスタンプを読み取り、それを再設定する追加のアプリケーションを作成しようとしました。元のSymbolファイルには「間違った」日時などがあるのではないかと思いました。新しい時間を1秒増やして設定しても、これは何の改善もありませんでした。更新コードの比較中に、再び1時間の差があります。

最後に、これらのシンボルファイルを更新から削除することにしました。それらは頻繁に変更されないので、私はこの問題を発見する時間がありますが、モトローラが次のアップデートを公開する場合、私は再び私の問題に陥ります。

問題の原因がどこにあるのかわかりません。これに関するヒントをいただければ幸いです。この問題は一部のファイルでのみ発生するため、ソースは無関係だと思います。とにかく、変更時刻は常に正しく変更されます。デバイスのサーバー展開フォルダー(更新のダウンロード元)のどこでも確認しました。これはタイムゾーンに関連する問題である可能性がありますが、すべてのファイルではなく、一部のファイルにのみ影響するのでしょうか。

さらに説明します。更新フォルダー内のサーバーには、次のファイルが含まれています。

FliteDevice.dll

fliteDLL.dll

OpenNETCF.dll

OpenNETCF.AppSettings.dll

OpenNETCF.Configuration.dll

pdt.exe

PdtComm.dll

Symbol.dll

Symbol.xml

Symbol.Audio.dll

Symbol.Audio.xml

Symbol.Barcode2.dll

Symbol.Barcode2.xml

Symbol.StandardForms.dll

Symbol.StandardForms.xml

System.Data.OracleClient.dll

System.EnterpriseServices.dll

System.EnterpriseServices.Wrapper.dll

System.Transactions.dll

System.Web.dll

update.exe

更新を実行するのは初めてであることを考えると、サーバーはこれらのファイルをすべてクライアントに送信します。私のクライアント(pdt.exe)はそれらすべてを受け取り、update.exeを実行し(そしてアップデーターがアプリファイルを新しいファイルに置き換えることができるように存在します)、変更されたファイル(この最初の実行の場合はすべてのファイル)を置き換えます。

次に、アップデーターがアプリケーション(pdt.exe)を実行し、アプリケーションがサーバー側のファイルとファイルを再度チェックします。そして今、更新するファイルは次のとおりです。

Symbol.dll

Symbol.xml

Symbol.Audio.dll

Symbol.Audio.xml

Symbol.Barcode2.dll

Symbol.Barcode2.xml

Symbol.StandardForms.dll

Symbol.StandardForms.xml

また、アップデーターはファイルを置き換え、メインアプリケーションを実行します。また、同じファイル(Symbol。*)は変更され、ダウンロードされ、置き換えられたと見なされます。それらだけで、他のファイルはさらなる更新チェック要求に存在しません。一度もない。私のコードや他のファイルではなく、これらのファイルに問題があります。

4

1 に答える 1

0

MD5 ハッシュの二次チェックを追加します。無限ループよりはマシ。

于 2012-10-25T14:43:08.757 に答える