这个问题已经有了答案:
Why does rename a loaded .net assembly work?
3个答案
我们正在尝试一次将更新推送到多个服务器,我的经理发现可以重命名正在运行的.exe文件。利用这些知识,他想重命名一个正在运行的exe,并复制到一个新版本的所述exe上,以便任何运行其内存中的foo.exe副本的人都可以,并且任何打开指向foo.exe的快捷方式的人都将获得一个应用了更新的新副本。
我想我需要澄清的是,他并不期望旧版本会神奇地更新,他只是希望他们继续运行旧版本,直到他们再次打开exe,在这种情况下,它会打开新的,有旧版本名称的版本。
它有时会抛出一个异常,即文件正在他的程序上使用,但如果他尝试在循环中重命名它,它最终会成功。在我的机器上,即使在一个循环中,我也无法使它工作。
我的第一个也是最主要的问题是:这样做是否可以接受。重命名正在运行的可执行文件是否应该是有效的方案?
第二,如果这是一个有效的方案,那么一个人如何能够可靠地做到这一点呢?我们目前的想法是尝试使用file.move(c)进行多次重命名,如果不起作用,则写入错误日志,以便手动处理。
最佳答案
一个飞机机修工和一个外科医生在酒吧碰头。机修工说:“你知道,我们的工作基本上是一样的。医生说:“是的,但是你不必在修理的时候保持飞机的飞行。”
试图在应用程序运行时通过移动文件来更新应用程序似乎和试图修复飞行中的飞机一样危险。可能吗?当然。大幅度增加了食物危机的风险?是的。
如果要更新的应用程序是托管应用程序,请考虑使用ClickOnce Deployment。这样,下次有人运行应用程序时,如果有新版本可用,它将被复制下来并自动安装。这比在应用程序仍在运行时试图破坏它要安全和愉快得多。