我的 .Net 4.5.2 WPF 應(yīng)用程序已部署到 C:\程序文件\文件夾 A\文件夾 B。它由自定義部署服務(wù)復(fù)制到該位置,該服務(wù)基本上是具有一些附加功能的復(fù)制作業(yè)。應(yīng)用程序本身是xcopy可部署的,因?yàn)槟惭b了所需的C++運(yùn)行時,安裝了.Net Framework。該應(yīng)用程序包括幾個 com 組件,這些組件通過應(yīng)用程序清單文件注冊,過去工作正常。更新應(yīng)用程序二進(jìn)制文件后,窗體 System.Activator.CreateInstance 中的幾次調(diào)用失敗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)).如果我只是將應(yīng)用程序文件夾重命名為c:\程序文件\文件夾A\FolderC,一切正常附加ProcessMonitor和WinDbg,我可以跟蹤應(yīng)用程序正在注冊表中搜索給定的類ID,找不到它,然后,如果從第一個文件夾啟動失敗,如上所述。從重命名或復(fù)制的文件夾開始,該過程加載關(guān)聯(lián)的dll并繼續(xù)。有關(guān)診斷此問題的任何提示?
1 回答

Cats萌萌
TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個贊
對于像我一樣糾結(jié)的人來說:就我目前的看法而言,問題在于SideBySide Cache。
簡而言之,Windows 會緩存應(yīng)用程序的清單信息,如果它確定應(yīng)用程序未更改,則使用緩存(您會注意到,您的進(jìn)程永遠(yuǎn)不會加載現(xiàn)有的外部清單)。
在我的情況下,可執(zhí)行文件沒有更改,但應(yīng)用程序的其余部分,包括清單信息。
解決方案是觸摸可執(zhí)行文件的修改日期,導(dǎo)致緩存失效。
基本上也回答了這個問題
- 1 回答
- 0 關(guān)注
- 86 瀏覽
添加回答
舉報(bào)
0/150
提交
取消