2009-04-01 14 views
2

時には、顧客(またはテスター)が、私が作業している製品のインストール時にパッチを必要とすることがあります。時には、私は彼にそれをテストすることができるように、修正を含むdllを作りました。古いバージョンのDLLに新しいバージョンを上書きし、アプリケーションを再起動します。'修正された' dllのキャッシュされた動作

これまでのところ、「新しい」dllは実際には使用されていないようですが、私は全く新しいスパークリングバイトがを超えてコピーされていることを肯定しています。古いDLL。

アプリケーションを再起動するときに最初の '修正プログラムが適用された'実行後に、新しい機能が明らかにになっています。古い動作は決して再現されません。

誰でもこの現象を観察しましたか? XPローダーの「キャッシュ」に最近dllを使用する可能性はありますか?

(注:これはXP SP2上で起こる)

答えて

1

はい、これが可能です。 Windowsでは、使用中のファイルを削除することはできませんが、不思議なことに(Windowsの場合は少なくとも)、まだ使用中のDLLの名前を変更することができます。あなたのテスターは

  • が新しいDLLをコピーdll.origする

    • リネームDLLに沿って何かを使用している場合は
    • 再始動アプリケーション
    • それが起こる可能性が

    、dll.orig版はまだ場合を使用していることがまだ完全にアンロードされていません(まだ起動しているアプリケーションの中にはまだ参照が残っているものがあるため)。

    これは私に数回噛まれました。したがって、私は何かが起こっていないことを確かめるために、通常、いくつかの動作(主にログファイルのヘッダーの何か)を変更します。

    回避策は、このDLLを使用するすべてのプログラムを終了することです。 Sysinternals Process Explorerは、それを使用するアプリケーションを見つけるのに役立ちます。

  • +0

    ありがとうございます!この動作はどこかに記録されていますか? – xtofl

    +0

    さて、おそらくそれはそうですが、わかりません。実験を通してこの知識を得ました。しかし、誰かがこれについての決定的な情報源を見つけることができれば、私も興味を持っています。 – gimpf

    関連する問題