C++ 为什么我的windows服务不连续写入文件?

C++ 为什么我的windows服务不连续写入文件?,c++,visual-studio-2010,windows-services,C++,Visual Studio 2010,Windows Services,我创建了一个windows服务,用于检查已安装的打印机并更新当前位于“C:\App\Data\info”(无文件扩展名)的文件。非常简单,它所做的只是使用正确的标志调用EnumPrinters,并将打印机信息2转储到一个文件中 在VisualStudio2010的“测试”项目中,一切都完全按照预期工作,这让我相信问题不在我的服务中。一旦我把它安装为windows服务,它就停止循环。它将在循环中运行一次,再也不会运行 代码参考: 我在这里使用模板: 并且只更改了服务类文件 最初的想法是安全权限或等

我创建了一个windows服务,用于检查已安装的打印机并更新当前位于“C:\App\Data\info”(无文件扩展名)的文件。非常简单,它所做的只是使用正确的标志调用EnumPrinters,并将打印机信息2转储到一个文件中

在VisualStudio2010的“测试”项目中,一切都完全按照预期工作,这让我相信问题不在我的服务中。一旦我把它安装为windows服务,它就停止循环。它将在循环中运行一次,再也不会运行

代码参考:
我在这里使用模板: 并且只更改了服务类文件

最初的想法是安全权限或等待函数不返回

编辑:我已经检查了整个文件系统,看看它是否被写入其他地方,并确认它不是

这是模板调用的服务循环函数

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循环已输入”)。 我还在WaitForSingleObject()的调用前面添加了OutputDebugString(“等待对象”)


循环似乎挂在WaitForSingleObject上。DbgView中的最后一条消息是“等待对象”

可能有很多原因。我建议您添加一些OutputDebugString()调用(Win32 API函数)并从Microsoft获取DbgView.exe,以查看发生了什么。另外,听起来您并没有这样做,但请确保您没有写入映射的驱动器或网络位置,因为您的服务很可能无法访问这些驱动器或网络位置。

设置Windows服务时,您是否在“登录”选项卡上指定了帐户?


默认的本地系统帐户几乎肯定没有使用打印机的权限,因此请确保设置一个可以正常访问打印机的帐户。

刚刚尝试了Dbgview.exe,但没有找到它,它似乎只运行了一次循环。WaitForSingleObject()是否会导致此问题?Sleep(10000)在那里做什么?最初,当服务未安装时,我需要降低速度。我把它留在里面是因为我想让它大约每十秒钟发射一次。这可能会导致问题吗?我没有,但是它将运行一次循环。它完美地访问打印机,将所有信息转储到文件中,并且通常完全按照预期工作。它只是不循环。我已经测试过从我的管理员帐户登录,但它仍然只运行一次循环。你能在上面描述的WaitForSingleObject调用周围发布代码吗?我正要,我注意到循环顶部缺少Do,问题解决了!我觉得自己像个白痴…魔鬼通常在细节中。。。你可能想结束这个问题,因为它可能对其他人没有好处。。。