2011-10-14 75 views
2

我有一個.NET應用程序,它自己註冊爲本地COM服務器(通過LocalServer32註冊表項)。正在執行的.NET本地COM服務器進程

我也在爲.NET應用程序編寫一個測試客戶端,但我發現了一些非常奇怪的東西。我的COM服務器實際上是在加載過程中,而不是我想要的。

測試客戶端沒有提及服務器的實現,所以Windows必須查看我的註冊表,查看LocalServer32中的可執行文件路徑,確定它是一個.NET程序集,並在應用程序中加載它?!?

我可以強迫我的應用程序,以這樣的進程外運行:

Type type = Type.GetTypeFromCLSID(myGuid, "localhost"); 
var foo = Activator.CreateInstance(type); 

但是,對我來說這一切似乎很unlogical。 COM組件是,只有註冊爲服務器; CLSID下沒有InProcServer32註冊表項。

有什麼辦法可以防止Windows「智能」,所以客戶端不需要特殊處理?

回答

0

要讓它作爲COM服務器運行,您需要在組件上設置ApplicationActivation屬性。

  1. 添加對System.EnterpriseServices的引用。
  2. 在你的AssemblyInfo.cs文件,添加適當的using語句:

    using System.EnterpriseServices; 
    
  3. 添加組件屬性:

    [assembly: ApplicationActivation(ActivationOption.Server)] 
    
+0

你的意思是在這裏公開爲COM +服務器,並通過regsvcs註冊工具 - 我說得對嗎? –

相關問題