我正在撰写需要在某个时候更新的应用程序。为此,我使用另一个将文件下载到应用程序文件夹的进程。但有时 某些文件(dll)无法覆盖。我认为这是因为他们很忙。
更详细:
主要应用 A 使用lsome dll。更新程序 B 使用所有相同的dll(实际上不同,但在不同的文件夹中复制它们)。 A 在单独的工作目录中将 B 作为分离进程启动。使用 ProcessExplorer 或 ProcessHacker ,我可以看到 A 和 B 的所有dll来自不同的路径 - 那里&#39 ;任何dll都没有共同的路径。接下来我关闭 A 。我在 B 中有WaitForSingleObjectEx,我甚至添加了超时,因此我100%确定已退出 A 。我将文件下载到 A 的文件夹(下载的文件 - A 使用的dll)。并且 CAN 会发生某些的dll无法被覆盖。每次发布都有不同的dll甚至更糟 - 一些发布工作正常!另一个奇怪的事情是我 CAN 在资源管理器中手动删除所有文件。
A 和 B 是否有可能在内存中使用相同的dll(认为他们不应该 - 每个应用都拥有它自己的副本)?应用程序退出后是否有可能没有卸载某些dll?为什么手动删除有效?我还能做些什么来找到理由(我尝试了 ProcessExplorer 或 ProcessHacker - 两个程序都没有显示任何罪犯)?