8

実行可能ファイルをコピー/置換するだけでアプリケーションを更新するユーティリティがあります。今、私は同様に更新する必要があるいくつかのDLLファイルを持っています。ただし、Windowsで何かが使用されているために置き換えられない場合や、DLLを使用しているものが多すぎて、置き換えられるようにロックが解除されることを保証できない場合があります。

現在、私の唯一の回避策は、最初に既存のDLLの名前を変更してから、その場所に新しいDLLをコピーすることです。しかし、その後、古いDLLは変更されたファイル名で取り残されます。

この状況でDLLをプログラムで置き換えるにはどうすればよいですか?

4

1 に答える 1

14

あなたの方法は問題ありません-ファイルの名前を変更し、新しいDLLを適切な場所にコピーするだけです。それが完了すると、Windows API関数MoveFileExを使用して、次にマシンを再起動したときに削除する古いファイルを登録できます。MSDNドキュメントから:

dwFlagsがMOVEFILE_DELAY_UNTIL_REBOOTを指定し、lpNewFileNameがNULLの場合、MoveFileExは、システムの再起動時に削除されるlpExistingFileNameファイルを登録します。lpExistingFileNameがディレクトリを参照している場合、システムは、ディレクトリが空の場合にのみ、再起動時にディレクトリを削除します。

したがって、次のようなことをしたいと思うでしょう。

MoveFileEx(szSrcFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);

私はDelphiであまり仕事をしていません。おそらく、適切なWindows API関数をインポートしてDelphiから直接この呼び出しを行うか、またはこれを処理するために呼び出すことができる小さなC++プログラムを作成することができます。

于 2013-01-25T21:07:10.823 に答える