如何删除在其他程序中仍然打开的临时文件?

我的程序写入临时PDF文件(使用Path.GetTempFileName ),然后传递给默认的PDF处理程序(通常是Adobe Reader)来显示。 我的Main方法中有一个finally块来删除临时文件,但是如果Adobe Reader在我的程序closures时仍然打开,则这些文件保持打开状态,无法删除。

一种解决办法就是把他们留在那里,并假定有一天用户将清除他的临时文件夹; 每个文件只有1.5 MB。 但有没有更好的办法?

我曾经想过我曾经阅读过有关如何在下次重新启动时注册要删除的文件的方法,类似于安装程序和Windows Update所做的,但是现在我找不到任何信息。 有没有像我可以在这里使用的function?

请参阅知识库文章如何移动当前正在使用的文件 。 如上所述,如果您的应用程序仍然在这些版本上运行,则需要在NT(包括2000,XP,Vista和Windows 7)以及旧版操作系统上使用不同的方法。

Pinvoke.net已经为涉及的Win32 API调用和常量管理了定义。

你可以注册或存储打开的文件,然后下次你的应用程序开始尝试删除临时PDF文件? 所以下次让你的应用程序保持整洁。 那时用户应该已经关闭了。