2013-02-11 131 views
5

如何強制本地COM服務器在普通帳戶下運行(本地系統是好的)? RunAs文檔看起來像是它唯一的DCOM,並不在本地工作。COM進程外服務器啓動多個實例

我面臨的問題是,我的CoCreateInstance被從在不同桌面上運行的進程調用,並且在這種情況下SCM需要爲每個桌面啓動一個新服務器,我只想要一個實例 - 按設計!

+0

這會是一個更好的擬合[ServerFault?](http://serverfault.com/) – Piccolo 2013-02-11 04:57:04

+0

DCOM用於本地服務器了。您是否嘗試過使用DCOM配置並更改身份? – sharptooth 2013-02-11 07:22:53

+0

當然有,沒有區別。我期望在任務管理器中看到SYSTEM,但是當我從命令行運行它仍然運行在我的ID – user1371314 2013-02-11 07:46:57

回答

0

你所描述的是一個系統服務,而不是一個COM服務器。 COM服務器被設計爲在任何運行它的會話下運行,而不是在「會話0」(服務)或任何單個會話下運行。如果您需要某些只能在1個會話中運行並且可以全局訪問其他任何內容的應用程序,則應該使用Windows服務,而不是COM服務器。

如果您需要其他原因,COM服務器方面,但要在全球範圍內共享資源或還有「一個過程」控制任何你需要做的......你可以有你的COM服務器使用您的服務進行通信的任何你喜歡的IPC方法。

另外,在你的評論中,你會說「當我從命令行運行時」 - 如果你從命令行運行EXE,它是否註冊爲COM服務器並不重要,它就像任何其他EXE/app一樣運行 - 這意味着它以任何用戶身份運行,無論你在哪個會話中。將EXE註冊爲COM服務器只允許其他進程運行該EXE並通過OLE與其通信/ COM,但EXE仍然可以作爲普通應用程序運行。例如,Microsoft Word和Outlook都是COM服務器。也就是說,outlook.exe是一個COM服務器,但當然你也可以把它作爲一個普通的應用程序運行。

+0

謝謝,理解。我已經轉換爲Windows服務,這是完美的工作。 – user1371314 2014-08-28 03:05:04