我正在写一个小工具来更新我们的应用程序。
为了更新更新实用程序,我希望它在运行时重命名,并从远程源复制新版本。 所以下一次启动更新程序时,会有一个新的版本。
你知道使用这种机制可能发生的任何问题吗?
其实我很惊讶它是可以重命名正在运行的程序(在那里丢了一个蛋糕…),而删除是不允许的。
亲切的问候任何提示
使用Win XP,.NET 3.5
您可以重命名 – 因为它只改变元数据,但是实际的文件分配链是未修改的,这意味着它们可以在使用它的进程中保持内存映射。
这是安装程序中无处不在的技巧,因为他们必须升级“实时”运行二进制文件。
如果应用程序试图以后从原始文件指定重新打开它可能会导致麻烦。 这不是经常发生的可执行文件或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)
这样,你可以