重命名正在运行的应用程序 - 危险?

时间:2011-04-28 14:27:29

标签: c# .net windows

我正在编写一个小实用程序来更新我们的应用程序。

为了更新更新实用程序,我希望它在运行时重命名,并从远程源复制新版本。因此,下次启动更新程序时,您将拥有一个新版本。

您是否知道使用该机制可能出现的任何问题?

实际上我很惊讶它可以重命名一个正在运行的程序(在那里丢失一块蛋糕......),但不允许删除。

亲切的问候任何提示

使用Win XP,.NET 3.5

2 个答案:

答案 0 :(得分:5)

您可以重命名 - 因为它只会改变元数据,但实际的文件分配链是未修改的,这意味着它们可以在使用它的进程中保留内存映射。

这是安装程序中无处不在的技巧,当他们必须升级“实时”运行二进制文件时。

如果应用程序尝试稍后从原始文件规范重新打开, 会导致麻烦。虽然您应该了解可能进行一些自我认证的嵌入式资源和程序(许可证检查),但这不是可执行文件或dll经常发生的事情。通常最好比稍晚更快地重新启动相应的应用程序,就像windows会敦促你重新启动系统更新一样

答案 1 :(得分:1)

通常可以重命名.exe而不会出现任何问题 - 重命名.dll是另一回事。

我建议使用子目录(标有日期或版本号)并创建一个小型启动器应用程序(与“真实”应用程序具有相同的名称和图标),从文本文件中读取当前版本并启动它

updater.exe (the launcher)
updater.config (containing /updater_v_02/updater.exe)
 /updater_v_01/updater.exe (the real app, v 01)
 /updater_v_02/updater.exe (the real app, v 02)

这样,你可以

  • 保留应用程序的多个版本
  • 在用户继续使用旧版本时测试新版本(通过直接从子目录启动)
  • 毫不费力地切换DLL等