2017-07-27 55 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