我想将一条消息从Windows服务传递到已经运行的Windows桌面应用程序。我在Windows服务上实现了一个计时器。在一段时间之后,服务向Windows应用程序发送消息。
服务或发件人代码如下:
System.Diagnostics.Process[] lProcs = System.Diagnostics.Process.GetProcessesByName("TestProcess2");
if (lProcs.Length > 0)
{
IntPtr handle = lProcs[0].MainWindowHandle;
if (handle != IntPtr.Zero)
SendMessage(handle, 232, IntPtr.Zero, IntPtr.Zero);
}
和windows桌面应用程序(接收方)代码如下:
protected override void WndProc(ref Message m)
{
if (m.Msg == 232)
{
MessageBox.Show("Received");
}
else
{
base.WndProc(ref m);
}
}
上述代码在两个进程都是windows桌面应用程序时工作正常。当我使用Windows服务作为发件人时,Windows桌面应用程序进程无法接收消息。你能帮我吗?
答案 0 :(得分:4)
服务和桌面应用程序在两个不同的Window Station中运行。出于安全原因,无法在单独的Window Station中运行的应用程序之间发送窗口消息。
为了在服务和桌面应用程序之间进行通信,您必须使用某种进程间通信方法(很好的可能性是套接字,命名管道,DCOM等)或某些框架运行在其中一个之上,例如Remoting或WCF。
答案 1 :(得分:2)
答案 2 :(得分:0)
执行此操作的一种方法是在服务中托管WCF接口。然后,这允许(可能)任何应用程序和服务之间的通信。
查看这些链接以获取详细示例:
http://www.codeproject.com/Articles/38160/WCF-Service-Library-with-Windows-Service-Hosting http://msdn.microsoft.com/en-us/library/ms733069.aspx