簡體   English   中英

C#COMException作為Windows服務,但WinForms可以

[英]C# COMException as Windows Service, but WinForms OK

我試圖用C#(VS2010,.NET 4.0)編寫Windows服務,該服務充當長期運行的OPC客戶端。 根據命令行參數的不同,它可以作為Windows服務運行,也可以作為具有“開始/停止”按鈕的WinForms應用程序來運行,以模擬服務(但更易於調試)。

我當前正在使用Interop.OPCAutomation進行對COM的調用。 當我以WinForms應用程序運行時,一切都按預期運行,沒有錯誤。 但是,當我作為Windows服務運行時,它失敗,但出現以下異常:

[System.Runtime.InteropServices.COMException:“不支持此類接口”錯誤代碼:位於Project.Opc.Collector..ctor(字符串serverName,IEnumerable`1 tagNames,在OPCAutomation.IOPCAutoServer.Connect(字符串ProgID,對象節點)處為-2147220990, C:\\ CompanyName \\ Projects \\ Applications \\ Project \\ Project.Opc \\ Collector1.cs:第41行中的字符串machineName,布爾異步)

這是有問題的代碼:

_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;
}

我正在將Windows服務器版本作為SYSTEM運行,並且無法與“允許訪問或關閉桌面訪問”一起使用。 由於此代碼在WinForms中可以正常工作,因此可能不是OPC問題。 但是我不知道為什么相同的代碼不能作為服務工作。

相關文章也有類似的問題,但仍未得到解答。 是否有其他人看到和/或解決了此問題?

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

檢查與您的問題類似的此鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM