2011-01-05 13 views
3

コンパクトフレームワークアプリケーションをビルドしました.WmAutoUpdateを使用してモバイルデバイスに新しいバージョンを展開しています(http://www.sebastianvogelsang.com/2009/09/23/wmautoupdate-a-net-compact-framework-auto-update-library/)。誰もこれを使用していますか?クールですが、問題があります。WmAutoUpdate - 誰でも使用しましたか?ロールバックしない

アプリケーションを途中でクラッシュさせると、バックアップバージョンをメインディレクトリにコピーしてリカバリする必要があります。これは、exeファイルが現在使用されているため、オペレーティングシステムによって「ロック」されているため動作しません。 Windowsエクスプローラを使用して削除することはできないため、これが正しいかどうかを確認できます。エラーの詳細は以下のとおりです。

System.IO.IOException was unhandled 
Message="IOException" 
StackTrace: 
    at System.IO.__Error.WinIOError(Int32 errorCode, String str) 
    at System.IO.File.Move(String sourceFileName, String destFileName) 
    at WmAutoUpdate.Updater.assertPreviousUpdate() 
    at WmAutoUpdate.Updater..ctor(String url) 

エラー)(Updater.assertPreviousUpdateにこの行で発生します

File.Move(f, appPath + "\\" + getFilenameFromPath(f)); 

コード通常(I」を実行することができますときに、アプリケーションのexeファイルを更新するために管理してどのようにわからない)。問題は、ロールバックするときに機能しないということです。

チアー
マーク

答えて

0

私はWmAutoUpdateを使用していると私は同じ問題を発見しました。問題は、実際に実行中のプロセスのファイルを移動できますが、上書きすることはできないということです。更新部分を確認すると、WmAutoUpdateは実行中のアプリケーションをバックアップディレクトリに移動し、更新バージョンを元のディレクトリに書き込みます。私はロールバック部分を次のように修正しました。

if (Directory.Exists(backupDir)) 
{ 
    string tmpDir = Path.Combine(Path.GetTempPath(),Path.GetFileNameWithoutExtension(Path.GetTempFileName())); 
    Directory.Move(appPath, tmpDir); 
    Directory.Move(backupDir, appPath); 
} 

まず、実行中のアプリケーションファイルをTempのランダムディレクトリに移動します。次に、バックアップフォルダをアプリケーションの元のディレクトリにコピーします。もちろん、これはデバイスのTempディレクトリに.TMPファイルを生成し、実際に実行中のプロセスがあるフォルダを生成します。プロダクションコードでこの一時フォルダを削除する必要があります。

関連する問題