我创建了一个使用Windows Messaging System的Windows服务。当我从调试器测试应用程序时,消息很好地通过但是当我安装它时我的消息...在14分钟之前询问
弗拉基米尔 1tuga
答案 0 :(得分:7)
服务通常不会收到窗口消息。它们根本不一定有窗口把手。即使他们这样做,他们也会在一个单独的桌面上运行。程序无法将消息从一个桌面发送到另一个桌面,因此服务只能从其他服务或服务启动的程序接收消息。
在Windows Vista之前,您可以将服务配置为与桌面交互。这使得服务在与登录用户相同的桌面上运行,因此以该用户身份运行的程序可以向服务的窗口发送消息。但是Windows Vista隔离了服务;他们不能再与任何用户的桌面交互。
还有许多其他方式与服务进行通信。它们包括命名管道,邮件槽,内存映射文件,信号量,事件和套接字。
例如,使用套接字,您的服务可以在开放端口上侦听,需要与之通信的程序可以连接到该端口。这可以打开远程管理的大门,但您也可以将服务限制为仅侦听本地连接。
以上所有内容都试图告诉你,你采取了错误的做法。但也有问题在于手头。您的程序在调试器中表现出一种方式,而在其他方面则表现不同。如果没有安装,你如何调试服务?您的服务运行的用户帐户是什么?你的调试器?您尝试了哪些不涉及调试器的调试技术(例如writeln
到日志文件来跟踪程序的操作)?
答案 1 :(得分:5)
当你说它“使用”Windows Messaging System时,你是什么意思?您正在使用或发送Windows消息吗?
如果您发送Windows消息,则需要确保正确执行此操作。我建议编写一个消息循环,以确保您的消息正确分派。我还建议阅读消息循环及其工作原理。
What is a Message Loop(点击要转到此信息来源的标题)
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
答案 2 :(得分:0)
谢谢大家的答案, 问题是操作系统(vista),我测试了我的Windows 2000,一切正常。
感谢Rob的光。