我有一个稍微复杂的设置,当然,在 XP 中可以正常工作,但在 Windows 7 上会卡住。这可能看起来很疯狂,但在当时是有道理的!
我有一个 WPF 应用程序,它启动然后启动另一个与外部设备通信的应用程序。启动后,它通过命名管道 (net.pipe) 使用 WCF(由新进程托管)与新进程建立通信。这似乎在任一操作系统上都可以正常工作。
我想让 WPF 应用程序的一些功能在外部对命令行程序可用,所以我设置了另一个 WCF 服务,这次由 WPF 应用程序托管,并再次通过命名管道公开它。同样,这似乎有效。
接下来,我想让 WPF 应用程序的功能通过 Web 可用。现在,重要的是 WPF 应用程序可以从普通用户帐户运行,所以我认为在 Windows 7 上完成这项工作的最佳方法是创建一个 Windows 服务,该服务将提供 Web 服务部分并让它与WPF 应用程序通过与命令行正常工作的相同命名管道。我实现了这一点,它在 XP 上运行良好,但在 Windows 7 上运行良好。问题似乎在于试图在 Windows 服务和 WPF 应用程序之间建立命名管道连接。
如果我以管理员身份运行 WPF 应用程序,它工作正常。因此,运行 Windows 服务的帐户似乎存在问题,无法与通过命名管道托管 WCF 服务的常规用户帐户进行通信。有没有办法使这项工作?似乎在普通用户帐户中运行的 WCF 服务可以使用命名管道与在同一帐户中运行的另一个应用程序进行通信,但它似乎不能用不同的帐户做同样的事情。
奇怪的是,反过来似乎也奏效了。事实上,windows 服务确实也公开了一个带有命名管道绑定的服务(它被用作激活函数,因为该服务一直在运行)。我可以毫无问题地从 WPF 应用程序连接到该服务。
我的安全知识有些有限。任何人都可以了解正在发生的事情吗?