2012-04-20 28 views
4

Interop.domino.dllアセンブリを使用してドミノ/メモと対話してドキュメントを作成、更新、削除するC#コンソールアプリケーションを作成しました。アプリケーションは、cmdプロンプトまたはVisual Studioを使用して手動で実行すると正常に実行されます。しかし、我々はスケジュールされたタスク(ドメインサービスアカウントで実行されている)のようなアプリケーションをセットアップしようとすると、それが次のエラーで失敗します。Interop.domino.dllを使用したC#コンソールアプリケーション - スケジュールされたタスクとして実行すると失敗する

  • System.Runtime.InteropServices.COMException:コンポーネントのCOMクラスファクトリを取得 エラーのためにCLSID {29131539-2EED-1069-BF5D-00DD011186B7}が失敗しました:80004005不特定のエラー(HRESULTからの例外:0x80004005(E_FAIL))。

エラーはできるだけ早く我々は次のとおりのNotesSessionオブジェクトのインスタンスを作成しようとし、具体的とき、Interop.domino.dllからオブジェクトを使用しようとして発生します。

  • ISessionは、NotesSession =新しいNotesSession();

は、いくつかの調査の後、私は相互運用機能アセンブリはと対話するためのデスクトップが必要であることを発見し、我々はマシンにログインし、サービスアカウントを使用してスケジュールされたタスクを実行した場合、スケジュールされたタスクで実行されていた、スケジュール正常に実行することをことを。サービスアカウントとしてログインしているときに、アプリケーションが実行されている間にsvchost.exeウィンドウが表示され、それがデスクトップを必要とする理由がわかります。

ただし、マシンにログインしているサービスアカウントは、サーバーが再起動するたびにアカウントを再度ログインする必要があるため、常に受け入れられる解決策ではありません。サービスアカウントがマシンにログインできるようにすることに関するセキュリティ上の懸念もあります。

だから、誰かがこの問題を回避する方法について何か提案があったのでしょうか?アセンブリが表示しようとするUIを抑制する方法はありますか?あるいは、誰もが同様の結果を達成する予定のタスクに代わるものを提案することができます。私たちがしなければならないことは次のとおりです。

  • は、設定された間隔でアプリケーションの実行を持っている(IE - /一日一回1時間に1回)
  • 理想的には、それは、ドメインサービスアカウントで実行されている(とは対照的に、ローカルシステムアカウント)サービスアカウントを必要とせずに
  • 実行して、マシンにログインする/ Interop.domino.dllからUI要素は

我々はノートウェブを利用する同様のアプリケーションを書くことについて考えているの抑制しましたサービスを提供することができます。コンソールアプリケーションをスケジュールされたタスクとして実行させないでください。しかし、可能ならば私がすでに書いたものを利用したいと思っています。

更新01/05/12

Iは、DNAの男のソリューション@ごとにNOTESNTSERVICE OS環境変数をetting試してみました。しかし、これは問題を解決しませんでした。

今のところ、アプリケーションは、ローカルシステムアカウントで実行され、デスクトップとの対話性が許可されたWindowsサービスとして設定されています。これは理想的ではありません。簡単にスケジュールを立てることはできず、ドメインサービスアカウントでは実行されていませんが、アプリケーションが機能するので、今のところこのアプローチを使用します。

は、このアプローチを示唆した答えがありましたが、ので、私はそれが正しいものとしてマークすることはできません削除されているようです。他の人に提案があるかどうかを確認するために質問を開いておきます。

+1

ドミノサーバーがある場合、ネイティブのノーツエージェントを実行してみませんか? – leyrer

+1

これはinteropアセンブリとは関係ありません。宣言とコードは含まれていません。 IBMにサポートを依頼してください。 –

+0

@leyrer - 私たちは、C#アプリケーションを動作させることができない場合、タスクを実行するためのノートエージェントを書く道を告げることになるかもしれません。しかし、アプリの開発の遅れでこの問題を発見しただけで、可能ならばすでに書いたものを利用したいと考えています。 –

答えて

0

私は、ローカルシステムアカウントでと許可デスクトップとの対話を実行しているWindowsのサービスとしてそれを設定するために、わずかにアプリケーションを変更することになりました。これは理想的ではありません。簡単にスケジュールすることができず、ドメインサービスアカウントで実行されていないためです。ただし、この方法では、アカウントが常にログインする必要なくアプリケーションを実行できるようになり、interop UI要素が表示される(エラーを回避する)ことができます。 (私は一日一回に設定)、設定された間隔でタスクを実行するWindowsサービスをスケジュールする

私は、タイマー・ソリューションを使用hereを提案しました。

0

それはまさに、なぜ言うのは難しいのですが、私はロータス相互運用クラスのレジストリ情報を読み取ることができないだと信じています。エントリがそこにあることは明らかです。そうでなければ、手動で実行している間は動作しません。だから、他の可能性を考えましょう。

私もこれは可能ですが、手動で実行すると、アプリケーションが32ビットとして稼動しているOSが、64ビットのスケジュール時かどうかを知りません

? IBMはWin64上でDomino COMクラスをサポートしていません。その最初の症状はレジストリlです。コンピュータにインストールされたNotes/Dominoのレジストリエントリ。ソフトウェアが特定のユーザーアカウントでインストールされた可能性があります。

+0

サービスアカウントのレジストリパーミッションを調べていませんが、スケジュールされたタスクが実行されているサービスアカウントがマシンにログオンしているときに、なぜ正しく動作するのかわかりません。サービスアカウントがレジストリを読み取る権限を持っていない場合、サービスアカウントがマシンにログオンしていても失敗する可能性があります。だから、それはレジストリのアクセス許可の問題ではないようです。 –

+0

32ビットと64ビットの提案に関しては、サービスアカウントがマシンにログインしたときにスケジュールされたタスクが機能しますが、それは完全に失敗していません。それが原因であれば、おそらくいつもうまくいかないでしょう。だから、私はそれを可能性として排除できると思う。 –

+0

まあ、私はまだそれはレジストリ読み取りエラーだと私は思い付くことができる最高の答えは、実際にログインしていない限り、何らかの理由で、ドメインサービスアカウントは、アクセス許可を持っていないと思う。ファイアウォール/侵入防止ソフトウェアがマシンにインストールされていますか?エラーコード0x80004005を検索することから、私はいくつかの場合に関係するその種のものを参照してください。私が持っている他の唯一の提案は、(別のアカウントでインストールされている場合は)ドメインサービスアカウントを使用してDominoを再インストールするか、アクティブなサポート契約がある場合はIBMに連絡することです。 –

1

あなたのコードは、Dominoサーバー上で実行されている場合は、OSの環境変数NOTESNTSERVICE = 1が設定されていることを確認する必要があります。この環境変数の詳細は、Lotus C APIのドキュメントを参照してください。ただし、サービスとして実行する場合はCOM APIにも適用されます。私は2003年にサービスとして実行しなければならなかったVB.NETアプリケーションを作成し、この環境変数を設定することが鍵でした。設定されていなければ、マシンからログオフするとすぐにサービスが停止します。将来このサービスをインストールする際にこの環境変数を設定することを忘れないように、サービスマネージャの開始コードで、SetEnvironmentVariableへのVB.NET呼び出しを使用して起動時にこの環境変数を直接設定する必要があります。これは、Dominoセッションオブジェクトの作成前に設定する必要がありました。

+0

ありがとう、私はこれを潜在的な解決策として考えます。私たちはサービスではなくスケジュールされたタスクを使用していますが、それを説明する方法から、その環境変数を設定することはスケジュールされたタスクでも機能するかもしれないと推測しています。 –

+0

これを調べて、この環境変数を設定しても問題は解決しませんでした。それは設定する必要があるかもしれないが、それはデスクトップと対話する必要性を抑えるように見えません。 –

関連する問題