0

DLL を複数回ロードしてマルチスレッドをエミュレートします (このために設計されています)。LoadLibrary()では実際には許可されていないため、DLL は および を介して自身を一時ファイルにコピーしGetTempPath()ますGetTempFileName()

これは小さなファイルであり、スレッドが破棄されるとライブラリが解放され、一時ファイルが削除されます。現在の問題は、スレッドの数が構成可能であることです (マニアは 50、100、またはそれ以上を選択できます)。これは基本的に、不安定な実行、クラッシュ、および通常の「一時ファイルの削除」ルーチンを実行しないリスクを露呈します。

それらの一時ファイルをそこに残しておいても大丈夫ですか? OSは通常、それ自体をクリーンアップしますか? または、自動クリーンアップ ルーチンを作成する必要がありますか? はいの場合、別の一時ファイルを保存してそれらのファイルのリストを保持し、UAC 制限などに当たらないようにするにはどうすればよいですか?

何か案は?

4

2 に答える 2

4

LoadLibrary/マルチスレッドの議論は私を混乱させますが、それは問題ありません。

Windows の一時ファイルは、通常、一時ファイルを作成したプロセス以外では削除されません。ユーザーが「ディスク クリーンアップ」ユーティリティまたは同様のツールを実行すると、それらのファイルが自動的に削除される可能性があります。あまり頻繁には起こらないと思います。

最善のアプローチ。アプリケーションで、temp フォルダー (および場合によっては各プロセス インスタンスのサブフォルダー) 内にサブディレクトリを作成します。アプリケーションが終了すると、DeleteFile を介して独自の一時ファイルのセットがクリーンアップされます。アプリの再起動時に、前のプロセスのクラッシュの結果として残っているフォルダーとファイルをクリーンアップするためのロジックがいくつかある場合があります。

CreateFile で FILE_ATTRIBUTE_TEMPORARY フラグを使用することもできます。

プロセスにグローバル例外ハンドラを用意することも検討できます。ハンドラーは、クラッシュ時に終了する前に、独自の一時ディレクトリを削除します。

于 2012-06-23T22:34:48.613 に答える
1

FILE_FLAG_DELETE_ON_CLOSEパラメーターを使用してCreateFileを作成できますか?

于 2012-06-24T09:10:57.283 に答える