DigitalPlatform / dp2

Integrated Library System / 图书馆集成系统
http://digitalplatform.github.io/dp2
Apache License 2.0
105 stars 54 forks source link

订单打印选项里面的模板文件有时候会丢失 #58

Open DigitalPlatform opened 6 years ago

DigitalPlatform commented 6 years ago

在 ClickOnce 方式安装的 dp2circulation 升级的时候,以前为打印订单窗的订单打印选项对话框配置的模板文件会丢失。

如果同一台机器上存在 ClickOnce 方式安装的 dp2circulation 和绿色安装版本,那么一个版本里面配置的模板文件,在另外一个版本里面会看不到内容。

DigitalPlatform commented 6 years ago

故障的原因是,虽然订单打印选项的大部分信息都是存储在用户目录的 dp2circulation.xml 文件中,但模板文件是放在数据目录下的 print_templates 子目录中的。这是以前版本的做法。

我们知道,ClickOnce 版本的数据目录,是 ClickOnce 安装程序负责创建的一个很深的目录。每次升级以后,这个目录位置都会发生变化。升级过程会自动把以前的数据目录复制到新的数据目录。但 ClickOnce 的这个升级机制有问题:

升级时候会自动复制数据目录中的文件,但无法复制数据目录中的子目录内的下级文件。所以存储在 print_templates 子目录里面的文件在升级以后就丢失了。

绿色版本没有这个问题。但绿色版本的数据目录和可执行文件目录是同一个目录,那么把这类配置信息和可执行文件放在一起并不是很好的做法。更严重的是,从上面可以看出,ClickOnce 和绿色版本的数据目录在同一台机器上处于不同位置,这样两个版本交替使用的时候就会出现找不到模板文件的故障。

所以新版本改进了模板文件的存储位置做法,dp2circulation 在启动时候,有一个函数专门负责把数据目录下的 print_templates 目录移动到用户目录下,并删除数据目录下的原有子目录(当然,移动是应该这样做,这里是强调一下)。

新版本创建模板文件的时候,会放入用户目录下的 print_templates 子目录了。

但,如果机器上同时存在 ClickOnce 和绿色版本的话,刚才介绍的自动移动子目录的过程,只会移动当时启动的那个版本的数据目录下的子目录。如果后面还有机会启动一次另外一个版本,因为负责自动移动子目录的函数会检测到用户目录下的 print_templates 子目录因为第一次移动而已经存在了,就不会再次移动这个版本的原有数据目录下的 print_templates 子目录。这是个遗憾。遇到这个情况,就只能由系统管理员想办法去重新定义模板了,在原有目录下能找到以前的模板文件,但文件名是类似 template_1 这样的模糊的文件名,属于哪个模板名就要靠猜了。

除了打印订单窗,其他一些窗口也用到了 PrintOption 类或其派生类,模板文件的存储位置也都改变了。需要测试一下这些位置的模板配置功能是否正常。