Interop.domino.dll アセンブリを使用してドミノ/ノートと対話し、ドキュメントを作成、更新、および削除する C# コンソール アプリケーションを作成しました。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 - 1 日 1 回 / 1 時間に 1 回)
- 理想的には、(ローカル システム アカウントではなく) ドメイン サービス アカウントで実行します。
- サービス アカウントをマシンにログインさせずに実行 / Interop.domino.dll の UI 要素を抑制
Interop アセンブリではなく Notes Web サービスを使用する同様のアプリケーションを作成することを検討しましたが、コンソール アプリをスケジュールされたタスクとして実行できない場合は、その道をたどります。しかし、可能であれば、私がすでに書いたものを利用したいと考えています。
更新 01/05/12
@dna-man ソリューションに従って、NOTESNTSERVICE OS 環境変数を設定しようとしました。ただし、これで問題は解決しませんでした。
今のところ、ローカル システム アカウントで実行され、デスクトップとの対話が許可された Windows サービスとしてアプリケーションをセットアップしました。これは、簡単にスケジュールを設定できず、ドメイン サービス アカウントで実行されていないため、理想的ではありませんが、アプリケーションは動作するので、当面はこのアプローチを使用します。
このアプローチを示唆する回答がありましたが、削除されたようで、正しいとは言えません。他の誰かが提案を持っているかどうかを確認するために、質問を少し開いたままにしておくかもしれません。