[原]排错实战——解决Tekla通过.tsep安装插件失败的问题
缘起
最近同事使用.tsep
安装Tekla
插件的时候,Tekla
提示该插件已经存在了,需要卸载后再安装。同事找了半天,没找到怎么卸载,我也没找到。于是决定弄清楚Tekla
是 如何判断一个插件安装与否的。 想必看过我其它排错文章的小伙伴已经猜到了,我们今天文章中的主角依然是process monitor
。好了,话不多说,好戏马上开始。
调查
在开始调查之前,我们可以先思考下,Tekla
是如何判断一个插件安装与否的?
我能想到如下三种可能:
- 通过读取注册表来判断。
- 通过配置文件来判断。
- 通过加载特定目录下符合条件(e.g. 导出某些约定好的接口)的文件来判断。
这三种情况,我们都可以通过process monitor
监控到。
捕获Tekla
操作记录
打开process monitor
,开始监视。然后双击.tsep
进行安装,当弹出错误对话框的时候,关闭process monitor
监视。
过滤我们关心的记录
process monitor
会捕获超级多的事件。如果不能进行有效的过滤,想找到我们关心的事件,无异于大海捞针。但是我们要根据什么条件来过滤呢?
首先,我们需要根据进程名进行过滤,但是我们怎么知道安装程序对应的进程名呢? process monitor
的Include Process From Window
功能可以很方便的帮我们根据窗口找到其对应的进程。按住该按钮(大写字母A
右侧,像靶子的那个按钮),拖动到目标窗体,松开即可。如下图:
除了根据进程名过滤,我们还需要根据其它条件进一步过滤。我们的过滤条件大概是这样的:
Process Name
只关心TsepFileDispatcher.exe
。Event Class
只关心Registry
和File System
,不关心Network
和Process and Thread
。Operation
排除Write
相关事件,只关心Read
相关事件即可。Path
排除以.dll
,.exe
结尾的路径,并且排除windows
及.net
相关的路径。Result
只关心SUCCESS
类型的。
下图是我们刚刚设置的过滤规则(为了突出重点,我删掉了process monitor
自带的过滤规则)。
经过以上过滤,剩下的事件就很少了,我们可以分别查看Registry
和File System
的事件。我们先看File System
事件。
当我看到
C:\ProgramData\Tekla Structures Learning\2018\Extensions\Installed\{叠合板模板}{1.0}{73703402-ee5b-4058-bf6a-ad1077481245}\Manifest.xml
这条记录的时候,我猜测Tekla
会把插件装在子目录Extensions\Installed
下,我要安装的插件标识符是叠合板模板
,版本是{1.0}
,对应的GUID
是{73703402-ee5b-4058-bf6a-ad1077481245}
。
{% note info %}
说明: 为什么不看Registry
事件呢?因为我找了一圈,没有很容易的在里面找到我关心的事件。
{% endnote %}
大功告成
至此,我们已经找到了我们关心的事件。使用Everything
在本地搜索叠合板模板
,删除所有搜到的记录。再次双击.tsep
文件进行安装,顺利完成。😎
总结
- 清晰的思路+合适的工具 能帮我们快速解决看似复杂的问题。
process monitor
真是windows
下的排错神器!你值得拥有!
参考资料
- Process Monitor
- 《Windows Sysinternals实战指南》