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