0

通过多次加载 DLL 来模拟多线程(它就是为此而设计的)。由于LoadLibrary()实际上不允许这样做,因此 DLL 通过GetTempPath()和将自身复制到一个临时文件中GetTempFileName()

这是一个小文件,在线程破坏时它会释放库并删除临时文件。现在的问题是线程数是可配置的(疯子可以选择 50、100 或更多),这基本上暴露了运行不稳定、崩溃和不通过通常的“删除临时文件”例程的风险。

如果我把那些临时文件留在那儿可以吗?操作系统通常会自行清理吗?或者我应该写一个自动清理程序?如果是,我怎样才能保存另一个临时文件来保存这些文件的列表,而不是受到 UAC 限制或其他限制?

有任何想法吗?

4

2 回答 2

4

您的 LoadLibrary/多线程讨论让我感到困惑,但没关系。

Windows 上的临时文件通常不会被创建它们的进程以外的任何东西删除。如果用户运行“磁盘清理”实用程序或类似工具,他可能会自动为他删除这些文件。我不认为这种情况经常发生。

最佳方法。让您的应用程序在临时文件夹(以及每个流程实例的可能子文件夹)中创建一个子目录。当您的应用程序退出时,它会通过 DeleteFile 清理它自己的一组临时文件。在应用程序重新启动时,它可以有一些逻辑来清理由于前一个进程崩溃而仍然徘徊的文件夹和文件。

您还可以查看在 CreateFile 上使用 FILE_ATTRIBUTE_TEMPORARY 标志。

您还可以考虑为您的流程设置一个全局异常处理程序。处理程序将在崩溃退出之前删除它自己的临时目录。

于 2012-06-23T22:34:48.613 回答
1

您可以使用 FILE_FLAG_DELETE_ON_CLOSE 参数来创建文件吗?

于 2012-06-24T09:10:57.283 回答