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