我正在编写一个小实用程序来更新我们的应用程序。
为了更新更新实用程序,我希望它在运行时重命名,并从远程源复制新版本。因此,下次启动更新程序时,您将拥有一个新版本。
您是否知道使用该机制可能出现的任何问题?
实际上我很惊讶它可以重命名一个正在运行的程序(在那里丢失一块蛋糕......),但不允许删除。
亲切的问候任何提示
使用Win XP,.NET 3.5
答案 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)
这样,你可以