2017-10-16 3 views
1

그래서이 프로그램을 개발 중입니다 ... IT 팀을 위해 자산 관리자로서 (앞으로는 더 많은 가능성이 있음) 의미합니다. 저는 지금 "Manager"와 "IAM"으로 언급 할 2 가지 서비스를 제공합니다. "관리자"는 자산 관리자가 업무를 수행하는 동안 자동 업데이트와 같은 모든 서비스 (현재 "IAM"으로 알려진 재고 자산 관리자 만)에 대해 모든 것을 관리합니다.시작시 ucrtbase.dll에서 Windows C++ 서비스 오류 발생.

어쨌든, 지금 당분간 위대한 노력을 기울이고 있습니다. 최근에 자동 업데이트 기능을 구현했습니다 (실제로 테스트를 거쳐 디버깅 할 필요가 있음). 이 과정에서 내 이름 지정을 일관되게 유지해야했습니다 (예 : "Updater"및 "CppWindowsService"에서 내 실제 서비스 이름으로 서비스 이름 변경).

이 작업을 시작하기 전에 멋진 작업이었습니다! 딸꾹질없이 시작, 중지, 설치 및 제거. 나는 모든 것에 대한 이름을 바꾸고 모든 것이 잘 컴파일되도록해야한다. 좋아 보인다. "관리자"와 "IAM"모두를위한 작품이 좋은 지금 설치,하지만 곧 내가 그것을 시작하려고, 나는 얻을 :

StartService가 (1053)

또한

을, 실패 내가하려고 할 때 services.msc에서 시작하면 다음과 같은 오류 메시지가 나타납니다.

Windows는 로컬 컴퓨터에서 서비스를 시작할 수 없습니다.

오류 1053 : 서비스가 적시

이 생각에 대한 이상한 것은 시작이나 제어 요청에 응답하지 않았습니다은 타임 아웃의 모든 종류의 대기하지 않습니다. 메시지가 즉시 울립니다. 그 메시지는 내 wmain() (Windows 엔트리 포인트. 그렇지 않으면 main()) 함수에서 호출 한 코드에서 온 것입니다.

if (!StartService(
     schService, // handle to service 
     0,   // number of arguments 
     NULL))  // no arguments 
    { 
     printf("StartService failed (%d)\n", GetLastError()); 
     CloseServiceHandle(schService); 
     CloseServiceHandle(schSCManager); 
     return; 
    } 
    else printf("Service start pending...\n"); 

Windows 이벤트 로그에서 오류 발생 후 다음 세부 정보가 포함 된 응용 프로그램 오류가 발생합니다.

애플리케이션 이름 오류있는 : InITManager.exe, 버전 : 0.0.0.0, 타임 스탬프 : 0x59e11e44

오류있는 모듈 이름 : ucrtbase.dll 버전 : 10.0.15063.674, 타임 스탬프 : 0x8ac9f9d4

예외 코드 : 0xc0000409

오프셋 오류 : 0x000000000007350e

오류있는 프로세스 ID : 0x3008

응용 프로그램 경로를 오류있는 0x01d346915918e17d

:

오류있는 응용 프로그램 시작 시간 C : \ 사용자 \ collin.walker \ 바탕 화면 \ InITService \ C++ \ 64 \ 릴리스 \ manager.exe를

오류있는 모듈 경로 : C를 : \ WINDOWS \ System32 \ ucrtbase.

보고서 이드 dll을 : 7fcbdcc4-be8e-476A-960f-4fa1fb21f892이 이

오류있는 패키지 이름

:

오류있는 패키지 상대 응용 프로그램의 ID :

이 정보를 다른 : ucrtbase.dll입니다 Visual Studio에서 사용되며 릴리스 빌드와 연결됩니다. 여기서 ucrtbased.dll은 디버거 빌드와 연결됩니다. 릴리스 모드로 구축 중입니다.

이제는 내 코드가 아니라는 것을 이미 알았지 만 누구나 볼 필요가 있다고 느끼면 그 코드를 포함시킬 것입니다. 그 매우 간단한 C++ winapi 물건.

이 문제를 해결하는 방법에 대한 제안 사항이 있으시면 언제든지 알려 주시면 감사하겠습니다.

+0

ucrtbase.dll과 아무 관련이 없습니다. 단지 나쁜 소식을 전하는 사람입니다. 0xc0000409는 예외적 인 예외이며, 코드가 스택 프레임을 손상시킬 때 발생합니다. 일반적으로 너무 많은 char을 복사하는 char [] 지역 변수. 흔히 발생하는 문제는 코드를 다른 컴퓨터에서 프로덕션 환경에서 안정적으로 실행하는 것이 프로젝트의 나머지 90 %입니다. 디버거가 연결된 상태에서 실행하여 휴식을 취합니다. –

+0

@HansPassant,'ucrtbase + 7350e'은 CRT의 ['abort'] (https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/abort) 함수의 int 0x29 명령어입니다. . 이것은''KERNEL_SECURITY_CHECK_FAILURE' (https://docs.microsoft.com/en-us/cpp/intrinsics/fastfail)에 대한 [''__fastfail' 내장] (https://docs.microsoft.com/en-us/cpp/intrinsics/fastfail)입니다. FAST_FAIL_FATAL_APP_EXIT' 코드 (7)를 사용하여/windows-hardware/drivers/debugger/bug-check --- 버그 검사 -0x139- 커널 - 보안 검사 실패 인터럽트는'KiRaiseSecurityCheckFailure'에 의해 처리되어'STATUS_STACK_BUFFER_OVERRUN' (0xC0000409)을 발생시킵니다. – eryksun

+0

굉장한, 그것은 톤을 도와 준다! 고맙습니다! 나는 모든 도움에 감사한다! (not/s) – TheEggSample

답변

0

문제 해결 중에이 게시물을 잊어 버린 종류 ... 어쨌든, 알아 냈습니다. 위의 코멘트는 위에 자리했다!

나를 위해 버퍼 오버플로가 내 서비스 이름을 변경하고 프로그램 디렉토리 이름도 변경되었습니다. 내 서비스의 생성자에서 로깅 객체를 초기화 할 때 오류가 발생했습니다. 생성자에 2 줄의 코드 만 있기 때문에 거기를 보는 것을 완전히 잊었습니다. 로그가 생성되는 하드 코드 된 디렉토리 위치를 변경했으며 모두 잘 작동했습니다! 유용한 정보를 주셔서 감사합니다!

관련 문제