私は少し複雑な設定をしていますが、もちろんXPでは問題なく動作しますが、Windows 7では窒息します。狂気のように見えるかもしれませんが、当時は理にかなっています。
外部デバイスと通信する別のアプリケーションを起動してから起動するWPFアプリケーションがあります。起動後、名前付きパイプ(net.pipe)を介してWCF(新しいプロセスによってホストされる)を使用して新しいプロセスとの通信を確立します。これはどちらのOSでも問題なく動作するようです。
WPFアプリケーションの機能の一部をコマンドラインプログラムで外部から利用できるようにしたかったので、今回はWPFアプリケーションによってホストされる別のWCFサービスをセットアップし、名前付きパイプを介して再度公開しました。繰り返しますが、これはうまくいくようです。
次に、WPFアプリケーションの機能をWeb経由で利用できるようにしたいと思いました。ここで、WPFアプリケーションを通常のユーザーアカウントから実行できることが重要です。そのため、Windows 7でこれを機能させる最善の方法は、Webサービス部分を提供するWindowsサービスを作成し、それをコマンドラインで正常に機能する同じ名前付きパイプを介したWPFアプリケーション。私はこれを実装し、XPでは正常に動作しますが、Windows 7ではチョークします。問題は、WindowsサービスとWPFアプリケーションの間に名前付きパイプ接続を確立しようとすることにあるようです。
管理者としてWPFアプリを実行すると、正常に機能します。そのため、Windowsサービスが実行されているアカウントが、名前付きパイプを介してWCFサービスをホストしている通常のユーザーアカウントと通信できないという問題があるようです。これを機能させる方法はありますか?通常のユーザーアカウントで実行されているWCFサービスは、名前付きパイプを使用して同じアカウントで実行されている別のアプリと通信できるようですが、別のアカウントで同じことを行うことはできないようです。
奇妙なことに、その逆が機能しているようです。実際、Windowsサービスは、名前付きパイプバインディングを使用してサービスを公開します(サービスは常に実行されているため、アクティブ化関数として使用されます)。WPFアプリからこのサービスに問題なく接続できます。
私のセキュリティに関する知識はやや限られています。誰かが何が起こっているかに光を当てることができますか?