簡體   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