我有一个软件诊断页面,我想在其中列出几个COM DLL的文件版本信息。该页面在普通的受限ASP.Net帐户(NETWORK SERVICE)下运行。
考虑到COM库的ProgID,获取物理文件路径或以其他方式访问文件版本的最佳方法是什么?
请注意,通过Type.GetTypeFromProgID加载它并使用类型的Assembly对象将无法正常工作,因为返回的Assembly对象是mscorlib的对象。
安装路径可由用户选择,但不保证是特定值。
答案 0 :(得分:1)
解决这个问题的一种方法是使用COM函数CLSIDFromProgID(Pinvoke.Net显示如何从.Net here调用此函数)来获取CLSID,使用GUID.ToString(“B “)将CLSID转换为适当格式化的字符串,然后使用它在注册表中进行groveling以查找COM服务器的注册位置。
路径为
HKEY_CLASSES_ROOT\CLSID\<YourCLSID>\InprocServer32
如果COM服务器是进程内服务器(即您期望的DLL)
请注意,注册表中的文件路径不一定是完全限定的路径。