2011-08-05 7 views
2

アンマネージドdllを呼び出すサービスがあります。特定のコードパスでは、メッセージボックスが開きます。サービスなので、実際のウィンドウは表示されませんが、スレッドはまだブロックされています。サービスからアンマネージメッセージボックスコールを殺す方法

メッセージボックスを自動的に削除するにはどうすればよいですか?

+3

興味深い問題、あなたがこれまで示し一切のMsgBoxがあってはならないUIなしでサービスからDLLを消費することを計画している場合、私は実際に同様の問題を持って、我々は代わりに例外をスローするサードパーティのライブラリを使用し、私はそれをキャッチさせ、メッセージボックスを表示し、例外はスローされません。最適な解決策は、dllの作成者に連絡して、メッセージボックス呼び出しを削除するか、それを表示しないオーバーロードを要求することです。 –

+0

最適な解決策は、ソースコードを手に入れて自分で修正することです。残念ながら、オプションはそれを殺すかdllにパッチを当てることです。 –

+0

これは役に立ちますか? http://thedailywtf.com/Articles/Dear-Sybase-MessageBox-Don%E2%80%99t-Belong-In-Drivers.aspx – TheNextman

答えて

1

実際にメッセージボックスは表示されますが、対話型ウィンドウステーションには表示されないため、ログオンしているユーザーは表示されません。

  • あなたがサービスインタラクティブを行うことができます。あなたはいくつかのオプションがあります。これにより、現在ログオンしているユーザーにメッセージボックスが表示されます。 MSDNにはinteractive servicesに関する情報があります。

  • MessageBoxエクスポートをフックして、独自のコードにリダイレクトすることができます。これは、低レベルのWindows API関数を使用して行うことができます。

+0

現在ログインしているユーザーは、デスクトップを見ている文字通りの人ですか?それが実行されているサービスアカウント?また、あなたはMessageBoxをフックするための正しい方向に私を向けることができますか? –

+0

Windowsは_window stations_というコンセプトを持っており、通常はメッセージボックスに応答するユーザーがいない非対話型ウィンドウステーションで実行されるサービスです。ただし、サービスが現在ログオンしているユーザーのウィンドウステーションと対話するようにすることができます。正確な内容を知るには、ドキュメントを勉強しなければなりません。私は実際に何年も前に 'MessageBoxA'をフックしましたが、詳細を忘れました。 MSDNの欄に必要な情報を提供してくれたのはMatt Pietrekだと思います。 –

+0

ありがとう、私は別の質問でそれを助けるために頼むだろう:) –

関連する問題