我的 .Net 4.5.2 WPF 应用程序已部署到 C:\程序文件\文件夹 A\文件夹 B。它由自定义部署服务复制到该位置,该服务基本上是具有一些附加功能的复制作业。应用程序本身是xcopy可部署的,因为您安装了所需的C++运行时,安装了.Net Framework。该应用程序包括几个 com 组件,这些组件通过应用程序清单文件注册,过去工作正常。更新应用程序二进制文件后,窗体 System.Activator.CreateInstance 中的几次调用失败System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).如果我只是将应用程序文件夹重命名为c:\程序文件\文件夹A\FolderC,一切正常附加ProcessMonitor和WinDbg,我可以跟踪应用程序正在注册表中搜索给定的类ID,找不到它,然后,如果从第一个文件夹启动失败,如上所述。从重命名或复制的文件夹开始,该过程加载关联的dll并继续。有关诊断此问题的任何提示?
1 回答
Cats萌萌
TA贡献1805条经验 获得超9个赞
对于像我一样纠结的人来说:就我目前的看法而言,问题在于SideBySide Cache。
简而言之,Windows 会缓存应用程序的清单信息,如果它确定应用程序未更改,则使用缓存(您会注意到,您的进程永远不会加载现有的外部清单)。
在我的情况下,可执行文件没有更改,但应用程序的其余部分,包括清单信息。
解决方案是触摸可执行文件的修改日期,导致缓存失效。
基本上也回答了这个问题
- 1 回答
- 0 关注
- 74 浏览
添加回答
举报
0/150
提交
取消