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



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

为了更新更新实用程序,我希望它在运行时重命名自己,并从远程源复制新版本。所以下次你启动更新程序时,你就有了一个新版本。

你知道使用这种机制可能会出现什么问题吗?

实际上我很惊讶它是可能重命名一个正在运行的程序(丢失了一个蛋糕…),而删除是不允许的。

谢谢你的提示

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

当安装程序必须升级"实时"运行的二进制文件时,这是一个普遍存在的技巧。

如果应用程序稍后尝试从原始文件规范重新打开,则可能会导致问题。可执行文件或dll通常不会发生这种情况,不过您应该注意可能会进行一些自我认证(许可证检查)的嵌入式资源和程序。通常最好尽早重新启动相应的应用程序,就像windows会在系统更新
时敦促您重新启动一样。

重命名一个。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等,没有任何麻烦

相关内容

最新更新