私のサーバー(IIS 8を実行しているWindows Server 2012)で実行されているvb.netで構築されたWebアプリケーションプロジェクトを継承しました。プロジェクトは私の会社が別のプロジェクトでビルドしたいくつかの.dllライブラリに依存し、エラーメッセージを.txtファイルに出力します。このプロジェクトの主な構造は、もはや私の会社ではない以前のプログラマーによって設定されました。私は必要なときに新しい.dllを追加するためにいくつかのコピー・ペースト・コードが与えられましたが、それはどういう形で実際に私に説明されたのではなく、コメントやその他のものには実際には書かれていません。プログラムの終了後にファイルを解放する
私は、プロジェクトの実行をトリガーすると、プログラムの実行が終了してから(Windowsはファイルがまだ使用中であることを知らせるまで)呼び出された.dllファイルまたは.txtファイルを削除できないことを発見しました。 )。私は、これらのファイルを使用していたプロセスが完了するとすぐに、このファイルをリリースすることを期待していました。私は、サーバー上のライブ環境で実行しているときと、ローカルマシン(Windows 10)でデバッグしているときの両方で、この動作に気付きました。
これは夫婦関連の質問に私をリード:
- ファイルは、すぐにプロセスがそれらを使用して終了したとしてリリースされていない場合、彼らはリリースされていますか?
- プロジェクトがサーバー上で実行されているときに、2人のユーザーが同じ.dllにアクセスしようとしたり、同時に.txtファイルに書き込もうとしたらどうなりますか?
- .dllが強制的に実行され、指定されたポイントでその.dllが解放されるようにするために、私の.dll呼び出しの後にプロジェクトに入れることのできるコードはありますか?それがコードで実行できるものでない場合は、プログラムの実行が終了した後にファイルを取得する方法がありますか(コンパイラやサーバー上の設定やフラグなど)。
を実行してください。これらのファイルにアクセスしている可能性がある実行中に開始されるサービスまたは追加のプロセスを探します。 – djv
プロジェクトのワークフローはかなりリニアです。プロジェクトは、ユーザーから要求を受け取り、.dllの入力を取得する処理を行い、.dllを呼び出し、.dllの出力を処理し、ユーザーに応答を送信します。応答が送信された後でも、.dllはまだロックされています。 .txtファイルは.dllによってのみ書き込まれます(Webアプリケーションはそれ自体を使用しません)。私の知る限りでは、ファイルを使用する追加のプロセスはありません。 – GeneralMike