我正在创建一个应用程序更新程序模块,并且遇到打开文件句柄的问题。
updater模块是一个单独的程序,但是通过应用程序启动,当用户点击“升级”时,该应用程序将通过Process.Start()进行更新。选项。更新程序所做的第一件事就是关闭正在更新的应用程序,以便可以重新安装它而不会出现任何文件访问问题等。
一切都很好,直到我尝试删除正在更新的应用程序的安装目录。我得到一个例外,说: -
该进程无法访问该文件,因为该文件正由另一个进程使用。
我通过使用SysInternals Process Explorer实用程序来完成任务。更新程序最初是正在更新的应用程序的子进程,但是一旦要更新的应用程序被终止,更新程序就是其自己的父进程。问题似乎是updater程序有一个打开的文件句柄,用于正在更新的应用程序的安装目录。
我可以通过在更新程序到达尝试删除安装文件夹之前关闭Process Explorer中的文件句柄来手动解决此问题,然后不会抛出异常。但是我需要一些方法来关闭代码中的这个文件句柄或者首先避免更新程序进程持有文件句柄。
我尝试使用WIN32 CreateProcess方法创建进程而不继承句柄,但是更新程序仍然保存了安装文件夹的文件句柄。
非常感谢任何建议。
答案 0 :(得分:0)
这可能是该进程的当前目录。如果您使用安装目录启动记事本作为其当前目录,则会显示相同的句柄。然后,当您在记事本中使用文件打开对话框导航到其他目录时,句柄将消失。
使用Environment.CurrentDirectory
更改目录或使用更好的当前目录创建子目录。