0

2 つの Windows アプリケーション (両方とも同じマシン上) に対して一方向の IPC メソッドが必要です。アプリケーションがCLI ベース + Windows サービスの場合、どちらが優れていますか。

PS 別のスレッドの宛先プロセス (CLI アプリケーション) にメッセージ キューを実装しました。を介してソースプロセス(GUIアプリケーション)からメッセージを投稿しますPostThreadMessage
そう。両方のアプリケーションが同じユーザーから実行された場合、すべて問題ありません。ローカル サービス ユーザーの下でタスク スケジューラを介して目的のアプリケーションを実行しているときに、1444 エラー コード (間違ったスレッド ID) が表示されます。
何か案は?

MSDN からの PPS

このスレッドは、同じローカル一意識別子 (LUID) を持つプロセスに属しているが別のデスクトップにあるスレッドにメッセージを投稿するには、SE_TCB_NAME 特権を持っている必要があります。それ以外の場合、関数は失敗し、ERROR_INVALID_THREAD_ID を返します。

このスレッドは、呼び出しスレッドと同じデスクトップに属しているか、同じ LUID を持つプロセスに属している必要があります。それ以外の場合、関数は失敗し、ERROR_INVALID_THREAD_ID を返します。

そう。SE_TCB_NAMEソース プロセスからスレッドをセットアップする方法を決定する必要があります。

4

2 に答える 2

1

WM_COPYDATA メッセージまたはカスタム メッセージ コード (テキストまたはバイナリ データを転送する予定がない場合) が機能します。WM_COPYDATA メッセージを使用するとバイナリ データを転送でき、Windows はプロセス境界を越えてコピーを行います。

GUI -> CLI アプリケーションでは、メッセージを受信するために CLI プロセスで非表示のウィンドウを作成する必要があります (メッセージを送信し、GUI アプリケーションから POST しない場合)。GUI から CLI にメッセージを POST するだけであれば、PostThreadMessage() 関数で十分であり、ウィンドウは必要ありません。

CLI -> GUI 方向では、ウィンドウは (通常) GUI アプリケーションに既に存在するため、複雑さはまったくありません。

于 2013-01-21T07:30:39.800 に答える
0

素晴らしい解決策もあります-ブーストライブラリからのメッセージキュー。

于 2013-01-22T18:07:31.133 に答える