1. 问题描述
我们的项目中使用了ctk来安装某些需要相互调用的dll插件。
在Git仓库中存在一个项目代码的文件夹,例如叫:“abc/Abc”,生成的可执行文件也放在这个路径的子路径下面。
为了更形象提现,例如在路径下有一个文件叫"A.txt",“abc”文件夹在“D:/”下,文件路径如下所示:
D:-------------------------------
|
abc--------------------------
|
Abc-----------------------
|
A.txt
在使用的过程中,我发现有一次解压之后的路径是“abc/abc/Abc”。如下所示:
D:-------------------------------
|
abc-------------------------- // 第一层abc目录
|
abc-------------------------- // 第二层abc目录
|
Abc-----------------------
|
A.txt
我想恢复成原来的路径,就将“abc”(第一层)文件夹中的“abc”(第二层)拷贝到第一层的同目录,这样导致了一个问题,windows是不识别大小写的,目录结构就成了如下所示:
D:-------------------------------
|
abc--------------------------
|
abc-----------------------
|
A.txt
最开始我没有发现路径已经从“abc/Abc”变成了"abc/abc",这时候编译并运行了我的程序,执行也没有问题。
当我发现路径不正确时候,我就将"abc/abc"直接修改成了“abc/Abc”,再次运行程序的时候,发现ctk加载插件失败。
2. 分析与解决
已经确定了传递给ctk框架的路径的url是正确的,那么问题就可能出在ctk上面了。
我觉得可能是它在某些地方生成了一下缓存导致的,先查看了一下home路径下,没找到。然后在当前程序的运行路径下找到一个“plugindb/plugins.db”文件,这个文件的生成日期非常新,删除之后就能够正常运行并加载插件了。
之后使用文本编辑器打开这个文件,有很多乱码,但也能观察到很多可以阅读的字符串,发现原来小写的路径真的被这个文件记录了,确定就是这个文件的问题了。
3. 进一步分析
如果在windows上,已经运行过这个程序,修改路径的大小写也会导致上述描述的问题。
补充
ctk的错误日志是:
ctkPluginException: Failed to install plugin