2014-11-06 60 views
-1

背景: 我正在將遺留代碼從WinXP遷移到Win7平臺。我有一個託管COM對象的傳統ATL Win32服務。我正在嘗試將它作爲一個超出proc的COM進程運行,並使用/ RegServer選項而不是/ Service註冊它。在Run()部分下,我有作爲一個out-proc公司的ATL服務

CoInitializeEx(NULL,COINIT_APARTMENTTHREADED); _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER,REGCLS_MULTIPLEUSE);

讓我們打電話給這個控制器供我們討論。

我有另一個服務,在用戶帳戶下啓動時運行,而不是LocalSystem。該服務執行CoCreateInstance來實例化控制器對象。發生這種情況時,控制器進程的實例將在用戶帳戶下創建。讓我們將此服務稱爲服務供我們討論。

現在我有另一個過程,它也做一個CoCreateInstance來實例化控制器對象。讓我們打電話給這個代理。該代理應該通過腳本和命令行運行。

問題:每次我的機器啓動並且服務和代理都執行一次,我看到兩個Controller進程實例。我不明白爲什麼。是因爲一個是服務而另一個是一個常規流程?我想有一個實例正在運行。

任何指針將不勝感激。

回答

0

好吧,我想我回答了我的問題。我似乎是session0隔離中的受害者。服務創建的實例在Session0中運行,並且由代理創建的實例在Session1中運行。因此2個實例。不知道一種方法來防止這種情況,所以有時間重新設計這個:)