各位熱愛WPF編程小夥伴不可避免的會遇到將ppt嵌入到本身編寫的軟件,但是有時候會遇到錯誤,此錯誤值出如今卸載office2013並安裝其餘版本office時候會出現。這是因爲某些機器上office不能徹底卸載形成的,卻是com口不能釋放徹底。因爲office2013在某些機器環境下卸載不徹底,在安裝其餘版本office後,調用ppt的com組件會致使彈窗錯誤:
「沒法將型別 'System.__ComObject' 的 COM 對象轉換爲接口型別 'Microsoft.Office.Interop.PointPower._Application'。因爲發生下列錯誤,接口 (IID 爲 '{{91493440-5A91-11CF-8700-00AA0060263B}') 之 COM 組件上的 QueryInterface 呼叫失敗而致使做業失敗: 連接庫未登陸。 (發生例外情況於 HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED))。"}」編程
手動解決辦法:數組
刪除註冊表ClassesROOT\TypeLib\{91493440-5A91-11CF-8700-00AA0060263B}項下的2.b便可。工具
因爲本人公司須要,寫了一個修改的小工具,須要的能夠代碼拿去,也能夠作一些修改。spa
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Win32; namespace office2013輔助卸載工具 { class Program { static void Main(string[] args) { if (!IsRegeditItemExist()) { RegistryKey key = Registry.ClassesRoot; key.DeleteSubKeyTree("TypeLib\\{91493440-5A91-11CF-8700-00AA0060263B}\\2.b", true); //該方法無返回值,直接調用便可 key.Close(); Console.WriteLine("Office2013殘留項已經清除!"); Console.ReadLine(); } else { Console.WriteLine("不須要清除,請謹慎操做!"); Console.ReadLine(); } } //判斷註冊表PrimaryInterAssemblyName項是否存在 private static bool IsRegeditItemExist() { string[] subkeyNames; RegistryKey hkcr = Registry.ClassesRoot; RegistryKey officeKey = hkcr.OpenSubKey("TypeLib\\{91493440-5A91-11CF-8700-00AA0060263B}\\2.b"); //RegistryKey software = hkml.OpenSubKey("SOFTWARE", true); subkeyNames = officeKey.GetValueNames(); //取得該項下全部子項的名稱的序列,並傳遞給預約的數組中 foreach (string keyName in subkeyNames) //遍歷整個數組 { if (keyName == "PrimaryInteropAssemblyName") //判斷子項的名稱 { hkcr.Close(); return true; } } hkcr.Close(); return false; } } }