サービス: 名前付きパイプでstd out、errを作成します。それらを作成するプロセスに接続します。名前付きパイプのバイトなし
HANDLE hStdOut = CreateNamedPipe(szStdOutPipeName,
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE,
1,
100,
100,
15000,
pSa);
yStartupInfo.hStdOutput = hStdOut;
CreateProcessAsUserW(..., yStartupInfo, ...);
この部分は動作します。作成されたプロセスの出力がパイプにリダイレクトされています。
クライアント: 名前付きパイプへの接続、成功しました。ピークで読み込むバイトがあるかどうかをチェックします(この時点で、バイトはパイプにプッシュされます)。その後、パイプからバイトを読み込みます。
hStdOutPide = CreateFileW(szPipeNameStdOut,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
PeekNamedPipe(hStdOutPide,
szBuffer,
kunBufferSize,
&ulBytesRead,
&ulBytesAvailable,
&ulRemainingBytes);
if(ulBytesAvailable > 0)
ReadFile(hStdOutPide, szBuffer, 1000, &ulBytesRead, NULL)
ハンドルが有効でプロセスが実行中であることを確認する周囲のコードを削除しました。
The Peekは、ulRemainingBytes
がであることを示しています。常に0
です。誰が私のエラーがどこにあるのか見ていますか?私はこれをしばらくの間稼動させようとしており、何のための適切なフラグがもはや何であるかを知らない。より多くの情報が必要かどうか尋ねてください!
セキュリティCreateNamesPipeのセキュリティ属性は、メソッドから生成されます。それはコードの他の多くの場所で使用されているので、問題はそこにあるとは思わない。
ありがとうございました。
を使用してIPCのためにこの質問を参照してください。 CreateFileの戻り値をINVALID_HANDLE_VALUEに対してチェックしています。ヒントをありがとうが、私はしばらくの間これに固執されていない場合stackoverflowに投稿していないだろう。 –
@Padawan Learner:あなたはどんなエラーを見ていますか?あなたが記述した動作はエラーを示唆しており、コードではエラーチェックが不十分であるためです。 – 0xC0000022L