问题

单位中使用的管理系统大部分都是自主开发的C/S架构的应用系统,这些系统之前都采用一个两层(客户端<—>数据库)的升级程序。近日,为了应用程序安全起见(两层结构客户端保存了数据库连接字符串),想将应用系统的升级程序替换为一个新写的三层( 客户端 <—>服务器 <—>数据库 )的升级程序。由于单位上应用系统的用户比较多,每个应用系统在用户桌面都有快捷方式,应用系统的主程序名称也不一致,如何快捷有效的替换每个用户计算机中安装的应用系统的升级程序,既不影响用户使用应用系统,又能减少信息化部门的工作量,这就成了问题。



旧升级程序升级过程



旧的升级程序包含一个配置文件,里面配置有连接的数据库服务器名称、升级后启动的应用系统主程序名称。升级过程如下图所示,升级步骤为:




  1)用户点击应用系统在桌面上的快捷方式,启动升级程序;


2)升级程序连接数据库,检查是否有更新文件,如果有,则数据库返回待更新的文件列表;


3)升级程序在数据库服务器中将待更新的文件集合下载到本地,并替换本地应用系统安装目录中相应的文件;


4)升级程序更新完毕,调用应用系统主程序,用户开始使用应用系统。


新升级程序升级过程


新的升级程序采用的是 客户端 <—>服务器 <—>数据库三层结构,升级 程序也包含一个配置文件,里面配置有服务器地址、升级后启动的应用系统主程序名称。升级过程如下图所示,升级步骤为:


   

1)用户点击应用系统在桌面上的快捷方式,启动升级程序;

2)升级程序连接服务器,检查是否有更新文件,服务器连接数据库服务器检查是否有更新文件,如果有,则数据库服务器返回给服务器待更新的文件列表,然后服务器将文件列表返回给客户端的升级程序;


3)升级程序通过服务器在数据库服务器中将待更新的文件集合下载到本地,并替换本地应用系统安装目录中相应的文件;


4)升级程序更新完毕,调用应用系统主程序,用户开始使用应用系统。


示例


假设应用系统代号为TestApp,旧的升级程序名称为OldClientUpdater,旧升级程序连接的数据库服务器为OldDBSrv,新的升级程序名称为NewClientUpdater,新升级程序连接的服务器为WebSrv,连接的数据库服务器为NewDBSrv,应用系统客户端主程序为TestAppClient.exe。


解决方案


解决方案尽量避免到每个用户的计算机上手动替换应用系统的升级程序,那样即影响用户的工作,又增加了信息化部门的工作。经过考虑以及和同事讨论,先后设计了三种方案。


方案一:


1)在 TestAppClient.exe中增加文件删除和文件更名功能;


2)将 NewClientUpdater、 NewClientUpdater的配置文件、  TestAppClient.exe放到OldDBSrv中。


3) 用户点击应用系统在桌面上的快捷方式,启动升级程序 OldClientUpdater ;


4) OldClientUpdater访问OldDBSrv将 NewClientUpdater、 NewClientUpdater的配置文件、  TestAppClient.exe下载到本地;


5)升级完毕, OldClientUpdater启动 应用系统客户端主程序TestAppClient.exe;


6) TestAppClient.exe启动时删除 OldClientUpdater,然后将 NewClientUpdater更名为 OldClientUpdater,升级程序替换完毕。


本方案最大的问题是要在 TestAppClient.exe 中增加文件删除和文件更名功能,对应用系统改动比较大。


方案二


1)单独写一个包含 文件删除和文件更名功能的可执行文件FileReplacer;


2) 在 TestAppClient.exe 中进增加启动FileReplacer程序的代码;


3)将 FileReplacer、 NewClientUpdater、 NewClientUpdater的配置文件、  TestAppClient.exe放到OldDBSrv中。


4) 用户点击应用系统在桌面上的快捷方式,启动升级程序 OldClientUpdater ;


5) OldClientUpdater访问OldDBSrv将 FileReplacer、 NewClientUpdater、 NewClientUpdater的配置文件 、   TestAppClient.exe下载到本地;


6)升级完毕, OldClientUpdater启动 应用系统客户端主程序TestAppClient.exe;


7 )T estAppClient.exe 启动文件替换程序 FileReplacer ;


8) FileReplacer 删除 OldClientUpdater,然后将 NewClientUpdater更名为 OldClientUpdater,升级程序替换完毕。


本方案虽然在 T estAppClient.exe中改动比较少,仅添加了几行代码,但是还是对主程序进行了修改。


方案三


1)复制一份新的 NewClientUpdater,重命名为MiddleClientUpdater;


2) 建立一个新的升级服务器地址为NewWebSrv;


3)将 MiddleClientUpdater配置文件中的服务器地址改为 NewWebSrv、启动程序改为 OldClientUpdater(PS:新) 。


4)修改 OldClientUpdater( PS: 旧)的配置文件,将启动程序改为 MiddleClientUpdater。


5)将 修改后的 OldClientUpdater ( PS: 旧) 配置文件、 MiddleClientUpdater、 MiddleClientUpdater配置文件、 TestAppClient.exe 放到数据库服务器 OldDBSrv中,


6) 复制一份新的 NewClientUpdater,重命名为 OldClientUpdater ( PS: 新) ,将重命名的 OldClientUpdater ( PS: 新) 及其 配置文件放到新的 升级服务器地址NewWebSrv中。


7) 用户点击应用系统在桌面上的快捷方式,启动旧升级程序 OldClientUpdater ( PS: 旧) ;


8) OldClientUpdater ( PS: 旧) 访问OldDBSrv将 修改后的 OldClientUpdater ( PS: 旧 ) 配置文件 、 MiddleClientUpdater 、 MiddleClientUpdater配置文件、 TestAppClient.exe 下载到本地;


9)升级完毕, OldClientUpdater ( PS: 旧) 根据 修改后的 OldClientUpdater ( PS: 旧) 配置文件 启动 MiddleClientUpdater ;


10) MiddleClientUpdater访问 新的升级服务器地址NewWebSrv,将 重命名的 OldClientUpdater ( PS: 新) 及其 配置文件 下载到本地,覆盖旧升级程序 OldClientUpdater ( PS: 旧) ;


11) 升级完毕, MiddleClientUpdater根据配置文件 启动 OldClientUpdater( PS: 新);


12) OldClientUpdater( PS: 新) 访问 升级服务器地址WebSrv,检测是否有更新,如果有更新,将更新文件下载到客户端,进行文件更新;


13) 升级完毕, OldClientUpdater ( PS: 新) 启动 应用系统客户端主程序TestAppClient.exe;


本方案不需要更新应用系统主程序,全程不需要到用户计算机上进行操作,只需要信息化部门简单的操作就可以替换用户计算机上的升级程序,应该是最佳的方案了。


当然如果读者还有更好的方法,我们可以一起讨论,我目前就想到这三种方法替换升级程序。