繁体   English   中英

使用Interop.domino.dll的C#控制台应用程序 - 在作为计划任务运行时失败

[英]C# console app using Interop.domino.dll - failing when running as Scheduled Task

我编写了一个C#控制台应用程序,它使用Interop.domino.dll程序集与domino / notes交互以创建,更新和删除文档。 通过cmd提示符或Visual Studio手动运行应用程序时,应用程序成功运行。 但是,当我们尝试将应用程序设置为计划任务(在域服务帐户下运行)时,它会失败,并显示以下错误:

  • System.Runtime.InteropServices.COMException:由于以下错误,检索具有CLSID {29131539-2EED-1069-BF5D-00DD011186B7}的组件的COM类工厂失败:80004005未指定错误(来自HRESULT的异常:0x80004005(E_FAIL))。

一旦我们尝试使用Interop.domino.dll中的对象,就会发生错误,特别是在尝试按以下方式创建NotesSession对象的实例时:

  • ISession notesSession = new NotesSession();

经过一些调查后,我发现互操作程序集需要桌面进行交互,如果我们运行计划任务,并且登录到计划的服务帐户计划任务上运行的计划任务将成功运行。 以服务帐户登录后,您可以看到应用程序在应用程序运行时会显示svchost.exe窗口,这就是它需要桌面的原因。

但是,让服务帐户始终登录到计算机并不是一个可接受的解决方案,因为这意味着每次服务器重新启动时都必须再次登录该帐户。 关于允许服务帐户登录计算机还存在一些安全问题。

所以,我想知道是否有人对如何解决这个问题有任何建议? 有没有办法抑制程序集试图显示的任何UI? 或者,任何人都可以建议替代计划任务,以达到类似的结果。 我们需要做的是:

  • 让应用程序以设定的间隔运行(IE - 每天一次/每小时一次)
  • 理想情况下,让它在域服务帐户下运行(而不是本地系统帐户)
  • 运行时无需将服务帐户登录到Interop.domino.dll抑制的机器/ UI元素中

我们已经考虑过编写一个类似的应用程序,使用notes web服务而不是Interop,并且如果我们无法将控制台应用程序作为计划任务运行,那么它将沿着这条路走下去。 但是,如果可能的话,我们想利用我已经写过的内容。

更新01/05/12

我已经尝试按照@ dna-man解决方案编写NOTESNTSERVICE OS环境变量。 但是,这并没有解决问题。

目前,我们已将应用程序设置为在本地系统帐户下运行的Windows服务,并允许与桌面交互。 这并不理想,因为它不允许我们轻松地安排它并且它不在域服务帐户下运行,但应用程序确实有效,所以我们现在将采用这种方法。

有一个答案暗示了这种方法,但似乎已被删除,因此我无法将其标记为正确。 我可以稍微打开这个问题,看看是否有其他人有任何建议。

如果您的代码在Domino服务器上运行,则必须确保已设置OS环境变量NOTESNTSERVICE = 1。 您可以在Lotus C API文档中找到更多此环境变量,但它在作为服务运行时也适用于COM API。 我在2003年创建了一个必须作为服务运行的VB.NET应用程序,并设置此环境变量是关键。 如果未设置,则一旦我注销机器,服务就会停止工作。 为了确保有人在将来安装服务时不忘记设置此环境变量,我只需让我的服务管理器启动代码在启动时使用对SetEnvironmentVariable的VB.NET调用直接设置此环境变量。 必须在创建Domino会话对象之前设置它。

很难确切地说出原因,但我认为它无法读取Lotus互操作类的注册表信息。 显然条目存在,否则在手动运行时不起作用。 所以让我们考虑其他可能性。

我甚至不知道这是否可行,但是你的应用程序在手动运行时以32位运行,但在计划时运行64位? IBM不支持Win64上的Domino COM类,我很确定第一个症状就是注册表l

更普通的可能性是服务帐户无权读取计算机上Notes / Domino安装的注册表项,可能是因为该软件是在特定用户帐户下安装的。

我最后稍微修改了应用程序,将其设置为在本地系统帐户下运行的Windows服务,并允许与桌面交互。 这并不理想,因为它不允许我们轻松地安排它并且它不在域服务帐户下运行。 但是,此方法确实允许应用程序运行而无需始终登录帐户,并且允许显示互操作UI元素(从而避免错误)。

为了安排Windows服务以设定的间隔(我每天设置一次)执行任务,我使用了此处提出的Timer解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM