2017-07-27 57 views
0

我使用Microsoft.Office.Interop.Outlook做到以下几点: -C#Microsoft.Office.Interop.Outlook推出

  1. 阅读名为Outlook文件夹“待定”
  2. 获得来自所有电子邮件附件在“待处理”文件夹
  3. 将附件保存到硬盘上的文件夹
  4. 阅读从已保存的文件附件并上传到我们的数据库

如果我手动运行我的C#控制台应用程序,上述所有要点都可以很好地工作。 当我从Windows服务启动控制台应用程序时,它也有用。但有些时候没有。 我在Stack中的某处读到Microsoft.Office.Interop.Outlook不是为Windows服务设计的。

什么是从Windows服务的所有上述任务的最佳方法(快速和快速开发)?

+0

您需要将您的窗口服务帐户设置为'System.ServiceProcess.ServiceAccount.LocalSystem'或'System.ServiceProcess.ServiceAccount.User',它会在安装 –

+0

@DarshanPatel时询问用户名和密码,这将不起作用。请参阅下面的答案 – MickyD

回答

3

什么是从Windows服务上述所有任务最好的方法(快速和快速开发)?

简答 - 你不能。

COM自动化服务器(例如来自Microsoft Office的自动化服务器)是基于GUI的,因此需要消息泵。当您认为Windows服务通常运行之前的给用户登录时,无法启动试图显示GUI的进程。它只会锁定。

有人可能会争辩说,您可以一直等到用户登录到Windows,但这样做会挫败windows服务的目的 - 用户登录不是必需的。此外,如果Windows重新启动,则应用程序将不会运行,直到用户再次登录。

+0

嗯,我的意思是你[caaaan泵服务中的消息](https://connect.microsoft.com/VisualStudio/feedback/details/241133/detecting-a-wm-timechange-event-in-a-net -windows-service),但“Microsoft.Office.Interop.Outlook”将在非交互式环境中成为一场灾难 - 消息泵与否。 [* Office应用程序假定它们正在交互式桌面下运行......这一事实本身使得从服务器端环境运行Office应用程序时存在风险并且不受支持。*](https://support.microsoft.com/en-us/help/257757 /考虑服务器端自动化的办公室) –

+0

如果OP在这里使用* Outlook *与* Exchange Server *是同义词,那么托管API将不需要交互性:https:// github.com/officedev/ews-managed-api –

+0

@ ta.speot.is同意。我见过人们将消息泵放入控制台应用程序中,但为什么会这样?同样的服务。如果没有交互式的Winstation目前没有消息泵送的数量将会有所帮助。 – MickyD