2011-12-06 49 views
1

我有一個使用COM服務器的.NET應用程序。 COM服務器在我運行它的機器上註冊,所以當我的代碼達到new MyInterop.SomeObject()時,啓動相應的MyComServer.exe如何指定我的.NET互操作應使用哪個COM服務器?

但是,在我調試時,我有幾個副本MyComServer.exe駐留在具有不同配置文件的不同文件夾中。我想指定我的應用程序應加載。

兩種解決方法,我知道的是:

  • 我可以使用之前每次(MyComServer.exe /regserver)重新註冊。但我不喜歡爲本地問題使用全局解決方案。
  • 我手動啓動MyComServer.exe(它作爲獨立應用程序運行),COM基礎結構將重新使用此現有過程。但這不是很自動化。

有什麼更合適的嗎?

回答

0

您可以嘗試基於調試版本動態創建配置文件。

+0

嗯?如果我想同時運行我的應用程序的多個實例,而每個實例都連接到不同的服務器呢? –

+0

啊,如果你有併發應用程序,你將需要這些不同的服務器..最初將建議建立多個調試版本的服務器..雖然潛在的註冊表混亂..如果我理解你最後的評論不知道你有什麼選擇有。 –

+0

那麼,目前這只是一個假設情景,我希望我從來沒有必要這樣做......但我喜歡做好準備。所以你說 - COM不允許這樣的變態? –

1

COM服務器.exe啓動了您的新的MyInterop.SomeObject()調用。毫無疑問,有很多.exe的運行是因爲您在調試時終止了程序,而不允許.NET正常關閉並減少終結器線程中的引用計數。 COM沒有一種機制來清理這些丟失的引用。只需使用Taskmgr.exe,Process標籤即可殺死正在運行的實例。

COM具有通過ROT(運行對象表)附加到服務器正在運行的實例的機制。然而,這不是你可以稍後安裝的,它必須得到服務器的明確支持。如果您必須選擇修改服務器,請考慮將其設置爲進程內服務器。麻煩少得多。