【发布时间】:2012-01-24 02:30:22
【问题描述】:
我创建了一个 Windows 服务,用于检查已安装的打印机并更新当前位于“C:\App\Data\info”的文件(无文件扩展名) 非常简单,它所做的只是使用正确的标志和转储调用 EnumPrinters PRINTER_INFO_2 到一个文件。
在 Visual Studio 2010 中,“测试”项目中的一切都完全符合预期,这让我相信问题不在我的服务范围内。一旦我将它安装为 Windows 服务,它就会停止循环。它将通过循环一次并且永远不会再次运行。
代码参考:
我正在使用这里的模板:http://www.kencotutorials.com/WindowsService.aspx
并且只更改了服务类文件。
最初的想法是安全权限或等待功能未返回。
编辑:我已经检查了整个文件系统,看看它是否被写入其他地方并确认它不是。
这是模板调用的服务循环函数。
void CMyService::MyServiceLoop(void)
{
CheckPrinters(); // updates a PRINTER_INFO_2 struct with all installed printers
WritePrinterFile(); // writes the file (i know there's no issue with the actual writing)
Sleep(10000);
OutputDebugString("Done sleeping");
Return;
}
我在 shell 应用循环的开头添加了 OutputDebugString("Shell loop entered")。 我还在调用 WaitForSingleObject() 之前添加了 OutputDebugString("Waiting for object")
循环似乎挂在 WaitForSingleObject 上。 DbgView 中的最后一条消息是“等待对象”。
【问题讨论】:
-
Sleep(10000)在里面做什么? -
最初,当服务没有安装时,我需要放慢它的速度。我把它留在里面是因为我希望它大约每十秒发射一次。这会导致问题吗?
标签: c++ visual-studio-2010 windows-services