2013-08-28 65 views
2

我創建了一個嘗試啓動應用程序的Windows服務(在本例中爲CATIA)。C#Windows服務COM異常80080005啓動應用程序時

我使用下面的代碼:

private Application GetApplicationObject(string ProgId) 
     { 
      Application AppObject = null; 
      //Try to get allready open instance of the Application 
      try 
      { 
       AppObject = (Application)Marshal.GetActiveObject(ProgId); 
      } 
      catch 
      { 
       //Create a new instance of the Application instead 
       AppObject = (Application)Activator.CreateInstance(Type.GetTypeFromProgID(ProgId));     
      } 
      return AppObject; 
     } 

我收到以下錯誤,當我服務的嘗試啓動應用程序:

System.Runtime.InteropServices.COMException (0x80080005): Retrieving the COM class factory for component with CLSID {87FD6F40-E252-11D5-8040-0010B5FA1031} failed due to the following error: 80080005. at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck) at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache) at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache) at System.Activator.CreateInstance(Type type, Boolean nonPublic) at CATIA.CATIA.GetApplicationObject(String ProgId)

重要:當我運行這段代碼作爲一個Windows應用程序,而不是的Windows服務的一切工作正常。我也試着首先啓動CATIA並讓它在後臺運行,但我的服務無法捕捉到它。

我使用本地系統運行服務,並且選中了「與桌面交互」框。

我的ProgId是CATIA.Application,正如我所說的,當我將它作爲應用程序而不是服務運行時,它可以工作。

什麼是造成這種情況的任何想法?

回答

2

我現在已經找到了解決方案。

我發現它在另一個論壇,有人有問題通過網絡運行另一個應用程序。 奇怪的是,這個解決方案也適用於我。

  1. 單擊運行
  2. 輸入dcomcnfg
  3. 瀏覽自己的方式組件服務>計算機>我的電腦> DComConfig>
  4. 然後找到你的應用程序,在我的情況 「CATIA應用」。
  5. 右鍵點擊>屬性
  6. 轉到「身份」標籤
  7. 變化誰應該從「啓動用戶」到「交互式用戶」運行該應用程序的用戶。

現在它適用於我。如果我先手動啓動,我仍然無法捕捉進程(GetActiveObject)。但至少該服務能夠無誤地啓動一個新實例。

我認爲這對很多遇到此錯誤消息時嘗試從Windows服務啓動應用程序的人會有幫助。

相關問題