我继承了一个在我的服务器上运行的vb.net中构建的Web应用程序项目(运行IIS 8的Windows Server 2012)。该项目依赖于一些.dll库,这些库也是由我公司在一个单独的项目中构建的,并将错误消息输出到.txt文件。该项目的主要结构是由一位不再与我公司合作的前任程序员建立的。我得到了一些复制粘贴代码,以便在需要时添加新的.dll,但它是如何工作的从未真正向我解释过,并且没有在评论或其他任何类似的文档中记录。
我发现如果我触发项目运行,我无法删除被调用的.dll文件或.txt文件,直到程序运行完毕很久(Windows告诉我该文件仍在使用中) 。我预计一旦使用它们的进程完成,项目就会释放这些文件。我在服务器上的实时环境中运行时以及在本地计算机(Windows 10)上进行调试时都注意到了这种情况。
这引出了一些相关的问题:
答案 0 :(得分:1)
文本文件的dll 和都被锁定的事实让我相信原始程序员可能忘记关闭/处置他们的文件处理程序。最简单的方法是:a)如果你有权访问源代码,添加行来关闭文件,或者b)使用JetBrains的DotPeek来反编译dll,看看你是否可以从那里找出问题。
至于一次只允许使用某个代码块,请考虑使用Monitor.Enter()
命名空间中的Monitor.Exit()
和System.Threading
函数来锁定"一次一个用户的代码块。如果您熟悉Debian,这在理论上与dpkg如何同时停止安装/删除/ etc等两个程序相似。
如果您想手动终止某个流程,请尝试Array.ForEach(Process.GetProcessesByName("PROCESS NAME HERE"), Sub(x) x.Kill())