2016-09-23 15 views
0

我正在嘗試在C#(VS2010,.NET 4.0)中編寫Windows服務,它充當長時間運行的OPC客戶端。根據命令行參數,它可以作爲Windows服務運行,也可以作爲具有啓動/停止按鈕的WinForms應用程序來模擬服務(但更易於調試)。C#COMException作爲Windows服務,但WinForms好

我目前使用Interop.OPCAutomation來調用COM。當我作爲WinForms應用程序運行時,一切按預期運行,沒有錯誤。但是,當我作爲Windows服務運行時,出現以下異常:

[System.Runtime.InteropServices.COMException:「沒有這樣的接口支持」 錯誤碼:-2147220990 在OPCAutomation.IOPCAutoServer.Connect(字符串進程id ,對象節點) at C:\ CompanyName \ Projects \ Applications \ Project \ Project.Opc \ Collector1.cs中的Project.Opc.Collector..ctor(String serverName,IEnumerable`1 tagNames,String machineName,Boolean異步) 41

下面是有問題的代碼:

_server = new OPCServer(); //this works OK 

try { 
    _server.Connect(serverName, machineName); // this is where it fails 
} catch (Exception exc) { 
    string message = string.Format("Unable to connect to OPC server {0} on {1}", serverName, machineName); 
    OpcException exception = new OpcException(message, exc); 
    Logger.Log(message, LogLevel.Exception, exception); 
    throw exception; 
} 

我以SYSTEM的身份運行Windows服務器版本,並且它不適用於允許訪問桌面的開啓或關閉。由於此代碼在WinForms中運行良好,因此可能不是OPC問題。但我不知道爲什麼相同的代碼不能用作服務。

A related article也有類似的問題,但它仍然沒有答案。是否有其他人看到和/或解決了這個問題?

+0

並非每個COM都以Windows服務模式運行。你必須要求供應商確認。 –

回答

2

似乎服務中使用的服務帳戶沒有COM組件的必需訪問權限,要解決此問題,請使用管理員帳戶或用於WinForm(當前用戶)的帳戶。

檢查這個link這是類似於你的問題。

+0

好主意。我將「登錄爲」切換到我的域帳戶(管理員),並且COM工作。我想我必須以管理員身份運行這一個。它打破了一些其他不相關的東西,我的壞,但我可以調試那些。但作爲一個後續問題,是否有任何已知擁有管理權限進行COM調用的「知名」帳戶(NETWORK SERVICE,LOCAL SERVER等)?這將簡化我的安裝。 – CrackingWise

+0

或者將用戶權限(需要COM)添加到用於服務登錄的帳戶。 –