如何关闭来自父进程的文件句柄
本文关键字:进程 文件句柄 何关闭 | 更新日期: 2023-09-27 17:55:00
我正在创建一个应用程序更新模块,目前遇到了一个打开文件句柄的问题。
updater模块是一个单独的程序,但是当用户单击'upgrade'选项时,它通过通过Process.Start()进行更新的应用程序启动。更新程序做的第一件事就是关闭正在更新的应用程序,这样就可以在没有任何文件访问问题等的情况下重新安装它。
一切都很好,直到我试图删除正在更新的应用程序的安装目录。我得到一个异常,说:-
该进程不能访问该文件,因为它正在被另一个进程使用。
我一直在使用SysInternals Process Explorer实用程序。更新程序最初是正在更新的应用程序的子进程,但是一旦要更新的应用程序被杀死,更新程序就是它自己的父进程。问题似乎是更新程序对正在更新的应用程序的安装目录有一个打开的文件句柄。
我可以通过在更新程序到达试图删除安装文件夹之前关闭进程资源管理器中的文件句柄来手动解决此问题,然后不会抛出异常。然而,我需要一些方法在代码中关闭这个文件句柄,或者首先避免文件句柄被更新程序进程持有。
我已经尝试使用WIN32 CreateProcess方法来创建进程而不继承句柄,但是安装文件夹的文件句柄仍然由更新程序持有。
这可能是进程的当前目录。如果启动记事本时将安装目录设置为当前目录,则会出现相同的句柄。当您使用记事本中的文件打开对话框导航到其他目录时,句柄会消失。
Environment.CurrentDirectory
更改目录或使用更好的当前目录创建子目录。