windows - 如何防止使用 GetTempFileName 创建的文件在重新启动时被自动删除
问题描述
我们的应用程序从外部设备收集数据。此数据主要驻留在内存中,但在用户明确保存数据之前,会以临时文件的形式假脱机到磁盘。这是为了在应用程序由于某种原因崩溃时提供一些恢复机会。一般来说,它工作得很好。
最近我们发现,由于 Windows 在自动更新方面变得更加强大,这些文件在重新启动期间会自动删除。因此,如果 Windows 终止我们的应用程序以自动应用更新,则允许恢复的临时文件在重新启动后消失。
我已经通过故意杀死应用程序并重新启动来测试这个问题;实际上,重新启动后临时文件已经消失。
这些文件是使用 Win32 API 调用GetTempFileName
以及GetTempPath
. 我读过的关于这个主题的所有内容都说这些文件永远不会自动删除,但它们显然正在被删除。
我能做些什么来阻止这种情况?还是我应该改变我们的安全数据的存储位置?
解决方案
您看到的是 Windows 10 中添加的新“存储感知”功能。
Windows 10 在最近的版本中能够自动清除临时文件。从 build 15014 开始,设置中出现了一个新选项。
启用后,可以设置清除临时文件、回收站等项目。您可以单独关闭它们。
或者,另一种选择是更改您的应用程序以将其临时文件保存在您控制的非系统临时文件夹中,而不是使用GetTempPath()
. 并且可能还使用其他东西GetTempFileName()
来创建临时文件名(例如使用日期/时间或 guid 代替),因此 Windows 不可能跟踪您创建的临时文件。那么也许您的文件将不再被 Storage Sense 自动删除。
推荐阅读
- android - 如何使用 Frida 获取 Java 方法的返回值
- laravel - 用于命令和任务的 laravel 身份验证
- ffmpeg - 使用 ffmpeg 从帧列表创建 mp4 视频
- matlab - Matlab的PARFOR循环中不能对矩阵变量进行分类
- vba - 根据单元格值更改excel中的弧长
- arm - ARM下编译NEON代码出错
- regex - 按不同语言过滤 Google Analytics 上的流量
- javascript - 将 Ajax 成功数据存储到 javascript 变量中以在其他 js 函数中使用
- python - 如何使用 Python 和 Pytest 比较和测试字典列表中的特定键
- r - 通过 bash/batch 文件访问 Oauth Token