System.Runtime.InteropServices.COMException: 由于以下错误,检索组件CLSID {29131539-2EED-1069-BF5D-00DD011186B7}的COM类工厂失败:80004005未指定的错误(Exception from HRESULT:0x80004005(E_FAIL))。
当我们尝试使用Interop.domino.dll中的对象时(特别是尝试创建NotesSession对象实例时),就会出现此错误:
ISession notesSession = new NotesSession();
经过一些调查,我发现interop程序集需要与桌面交互,如果我们使用服务帐户登录运行计划任务,则计划任务将失败。当以服务帐户身份登录时,您可以看到应用程序在运行时会弹出svchost.exe窗口,这就是它需要桌面的原因。
但是,让服务帐户始终登录机器不是可接受的解决方案,因为这意味着每次服务器重新启动时都必须重新登录该帐户。还存在一些安全问题,关于允许服务帐户登录机器。
因此,我想知道是否有人对如何解决这个问题有任何建议?是否有一种方法可以抑制程序集尝试显示的任何UI?或者,有没有人建议一个类似于计划任务的替代方案,可以实现类似的结果。我们需要做的是:
在设置的间隔(例如-每天一次/每小时一次)运行应用程序
理想情况下,以域服务帐户身份运行(而不是本地系统帐户)
无需让服务帐户登录到机器/UI元素从Interop.domino.dll中抑制运行
我们考虑编写一个类似的应用程序,利用notes web服务而不是Interop assmebly,并将沿着这条路走,如果我们不能让控制台应用程序作为计划任务运行。然而,如果可能的话,我们想利用我已经编写的内容。
更新01/05/12
我已经尝试了根据@dna-man解决方案设置NOTESNTSERVICE OS环境变量。但是,这并没有解决问题。
目前,我们已将应用程序设置为在允许与桌面交互的本地系统帐户下运行的Windows服务。这并不理想,因为它不允许我们轻松地安排它,并且它没有在域服务帐户下运行,但应用程序可以工作,所以我们现在将采用这种方法。
有一个答案建议采用这种方法,但似乎已被删除,因此我无法将其标记为正确答案。我可能会让问题保持一段时间,看看是否有其他建议。