通过多次加载DLL来模拟多线程(它是为此而设计的)。由于LoadLibrary()
并不真正允许,因此DLL会通过GetTempPath()
和GetTempFileName()
将自身复制到临时文件中。
这是一个小文件,在线程销毁后,它会释放库并删除临时文件。现在的问题是线程的数量是可配置的(疯子可以选择50,100,更多),这基本上暴露了运行不稳定,崩溃的风险,而不是通过通常的“删除临时文件”例程。
如果我将这些临时文件留在那里,可以吗?操作系统通常会自行清理吗?或者我应该写一个autocleanup例程?如果是,我如何保存另一个临时文件以保存包含这些文件的列表,而不是达到UAC限制或其他?
有什么想法吗?
答案 0 :(得分:4)
您的LoadLibrary /多线程讨论让我感到困惑,但没关系。
Windows上的临时文件通常不会被创建它们的进程删除。如果用户运行“磁盘清理”工具或类似工具,他可能能够为他自动删除这些文件。我不认为这种情况经常发生。
最佳方法。让您的应用程序在临时文件夹中创建一个子目录(可能还有每个流程实例的子文件夹)。当应用程序退出时,它会通过DeleteFile清除它自己的一组临时文件。在应用程序重新启动时,它可以有一些逻辑来清理由于先前进程崩溃而仍然挥之不去的文件夹和文件。
您还可以查看在CreateFile上使用FILE_ATTRIBUTE_TEMPORARY标志。
您还可以考虑为您的流程设置一个全局异常处理程序。处理程序将在崩溃之前删除它自己的临时目录。
答案 1 :(得分:1)
您可以将FILE_FLAG_DELETE_ON_CLOSE参数用于CreateFile吗?