缘起
最近同事使用.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:ProgramDataTekla Structures Learning2018ExtensionsInstalled{叠合板模板}{1.0}{73703402-ee5b-4058-bf6a-ad1077481245}Manifest.xml
这条记录的时候,我猜测Tekla
会把插件装在子目录ExtensionsInstalled
下,我要安装的插件标识符是叠合板模板
,版本是{1.0}
,对应的GUID
是{73703402-ee5b-4058-bf6a-ad1077481245}
。
说明: 为什么不看Registry
事件呢?因为我找了一圈,没有很容易的在里面找到我关心的事件。
大功告成
至此,我们已经找到了我们关心的事件。使用Everything
在本地搜索叠合板模板
,删除所有搜到的记录。再次双击.tsep
文件进行安装,顺利完成。
总结
- 清晰的思路+合适的工具
-
process monitor
真是windows
下的排错神器!你值得拥有!
参考资料
- Process Monitor
- 《Windows Sysinternals实战指南》