掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ファイルの上書きについて (ID:21147)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
お世話になっております。 タイトルに書きましたように「ファイルの上書き」について質問させてください。 まず状況をご説明しますと、AとBの2つのアプリがあります。 AはFormCreateにメインルーチンを記述し、プロジェクトファイルの最下部にて、Application.Runを削除しましたので、起動後にFormCreateを処理し終わったら、そのまま終了するアプリケーションとなっております。 AのFormCreateの最後でBをWinExecで起動しますので、A→Bへバトンを渡して終了するアプリになっております。 ここまでの動作は問題なく実現しております。 BのFormCreateでネット上に最新バージョンのAがアップされていればダウンロードしてきて、AのEXEファイルを上書き更新したいのですが、実際ファイルをダウンロードしてきて上書き出来るまでに約20秒も掛かってしまいます。処理順を箇条書きすると以下の通りです。 (1)起動直後に10秒スリープ (2)最新バージョン有無のチェック (3)2でAの最新バージョンがあればテンポラリにダウンロード (4)テンポラリから実際のディレクトリにファイル移動 このような流れになっております。暫定版ですが4の部分のソースが以下のような感じで、 mvFlg := False; while ( not mvFlg ) do begin // ファイル移動 // mvFlg := MoveFileEx( PChar('c:\temp\a.exe'), PChar('c:\a.exe'), // (MOVEFILE_REPLACE_EXISTING or MOVEFILE_COPY_ALLOWED) ); mvFlg := MoveFile(PChar('c:\temp\a.exe'), PChar('c:\a.exe')); if ( not mvFlg ) then begin LOG := LOG + DateTimeToStr(Now) + ' - ' + 'a.exe の移動に失敗しました->リトライします.' + #13#10; end else begin LOG := LOG + DateTimeToStr(Now) + ' - ' + 'a.exe の移動に成功しました.' + #13#10; end; end; ShowMessage(LOG); デバッグのため、MoveFileの戻り値を評価してログを書き出して見ると、初回から成功するまでに(私の開発環境の場合)20秒程度も掛かってしまいます。20秒程度経過すると「成功しました」のログをはき出しつつループを抜けているようです。 コメントアウトしてますが MoveFileEx でも試してみましたが、同じく20秒掛かります。 最悪、数十秒待つことで処理を実行できるならば、それで行こうと思いますが、上記のコードは一歩間違うと無限ループに陥りそうで確信が持てません。 上記のような処理をしたい場合、どのようにコードを組み立てたらよろしいでしょうか?ご教授くださると幸いです。 開発環境はDelphi6entでOSはWindowsXP PROです。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.