Я создал службу 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;
}
Я добавил OutputDebugString («Введен цикл оболочки») в начале цикла приложения оболочки.
Я также добавил OutputDebugString («Ожидание объекта») перед вызовом WaitForSingleObject ()
Кажется, что цикл зависает в WaitForSingleObject. Последнее сообщение в DbgView - «Ожидание объекта».