2012-01-24 3 views
0

설치된 프린터를 확인하고 현재 "C : \ App \ Data \ info"(파일 확장자 없음)에있는 파일을 업데이트하는 Windows 서비스를 만들었습니다. 매우 간단합니다. 올바른 플래그와 덤프를 사용하여 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 ("Shell loop entered")을 추가했습니다. WaitForSingleObject() 호출 앞에 OutputDebugString ("Waiting for object")도 추가했습니다.

루프가 WaitForSingleObject에서 정지 된 것처럼 보입니다. DbgView의 마지막 메시지는 "Waiting for object"입니다.

+0

'Sleep (10000) '이란 무엇입니까? –

+0

처음에는 서비스가 설치되지 않았을 때 속도를 늦춰야했습니다. 나는 약 10 초마다 발사하기를 원했기 때문에 그것을 버렸다. 이것이 문제의 원인이 될 수 있습니까? – rbuddicom

답변

0

많은 이유가있을 수 있습니다. 일부 OutputDebugString() 호출 (Win32 API 함수)을 추가하고 Microsoft에서 DbgView.exe를 가져와 무슨 일이 일어나는지 살펴볼 것을 권한다. 또한,이 작업을 수행하는 것처럼 들리지는 않지만 맵핑 된 드라이브 또는 네트워크 위치에 쓰지 않도록하십시오. 서비스에 액세스 할 가능성이 가장 높기 때문입니다.

+0

Dbgview.exe를 시도해보고 havnt가이 파일을 추적하여 루프를 한 번만 실행하는 것처럼 보입니다. WaitForSingleObject()가이 문제를 일으킬 수 있습니까? – rbuddicom

0

Windows 서비스를 설정할 때 로그온 탭에서 계정을 지정 했습니까? http://www.coretechnologies.com/WindowsServices/FAQ.html#AppNotWorkingFromService

기본적으로 로컬 시스템 계정에는 프린터를 사용할 수있는 권한이 없으므로 프린터에 정상적으로 액세스 할 수있는 계정을 설정해야합니다.

+0

하지만 루프를 한 번 실행합니다. 프린터에 완벽하게 액세스하고 모든 정보를 파일에 덤프하며 일반적으로 예상대로 정확하게 작동합니다. 그냥 반복하지 않습니다. 내 관리자 계정에서 로깅 테스트를 해봤지만 루프를 한 번만 실행합니다. – rbuddicom

+0

위에서 설명한 WaitForSingleObject 호출과 관련하여 코드를 게시 할 수 있습니까? – CoreTech

+0

나는에 관하여이고 나는 루프의 정상에 놓치는 Do를 통지한다, 문제는 해결했다! 나는 바보처럼 느껴진다 ... – rbuddicom

관련 문제