1

名前付きパイプを使用して、.Net 3.5 を使用して 2 つのプロセス間で通信しています。これは Windows 7 では正常に動作しますが、Windows XP では動作しません。

そこで InvalidOperationException を取得しています。ドイツ語のメッセージの翻訳の試みは次のとおりです。

このためのテスト プロジェクトを作成しました: http://www.chinery.de/dateien/NamedPipeTest.zip

アプリケーションで「接続」を押すと、パイプの名前が表示されます。右側には、すべてがうまくいった場合にパイプを介して送信されるメッセージを入力できます。

前述したように、この問題は Windows XP でのみ発生します。

誰もこれについて手がかりを持っていますか?

4

3 に答える 3

1

私は最終的に自分で解決策を見つけました。それはパイプ クライアントの作成でした。

NamedPipeClientStream pipeClient = new NamedPipeClientStream("localhost", PipeName, PipeDirection.InOut)

これを次のように変更する必要がありました: NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", PipeName, PipeDirection.InOut)

(サーバー名を「localhost」から「.」に変更)

これはWindows 7では何とか機能しましたが、XPでは機能しませんでした。これで、最終的に両方のシステムで動作します。

于 2013-02-07T14:07:06.173 に答える
0

権限の問題がある可能性があります。そのため、必要なアクセス権を提供する必要があります。

PipeSecurity _pipeSecurity = new PipeSecurity();
PipeAccessRule psEveryone = new PipeAccessRule("Everyone", PipeAccessRights.FullControl,
    System.Security.AccessControl.AccessControlType.Allow);

_pipeSecurity.AddAccessRule(psEveryone);

NamedPipeServerStream pipeServer = new NamedPipeServerStream(PipeName, PipeDirection.In,
    1, PipeTransmissionMode.Message, PipeOptions.Asynchronous, 4, 4, _pipeSecurity);

1 回しかリッスンしないという問題を解決するには、次の手順に従ってください: 各サービスを右クリック > [プロパティ] > [ログオン] > [ログオン: ローカル システム アカウント] を選択し、[デスクトップとの対話をサービスに許可する] にチェックを入れます。または ServiceProcessInstaller プロパティに移動し、アカウントを LocalSystem として設定します。

于 2016-03-01T11:36:40.720 に答える