Я создал службу Windows, которая проверяет установленные принтеры и обновляет файл, находящийся в настоящее время на «C: \ App \ Data \ info» (без расширения файла). Очень просто, все, что он делает, это вызов EnumPrinters с правильными флагами и отвалами PRINTER_INFO_2 в файл.Почему не работает мой Windows-сервис в файл?
Все работает точно так, как ожидалось в 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 - «Ожидание объекта».
Что такое «Сон (10000)»? –
Ну, сначала, когда служба не была установлена, мне нужно было ее замедлить. Я оставил его, потому что хотел, чтобы он стрелял примерно каждые десять секунд. Может ли это вызвать проблему? – rbuddicom