프로그램이 시작되지만 Windows 7에서 아무 것도 수행되지 않습니다


2

사용자 중 한 명이 자신의 작업에서 Windows 7 64 비트 컴퓨터에서 (오픈 소스) 소프트웨어 를 실행하려고합니다 .

불행하게도, GUI 버전이나 프로그램의 명령 행 버전은 그의 머신에서 실행되지 않습니다. 프로그램이 시작된 것처럼 보이지만 아무것도하지 않으며 GUI 버전도 창을 열지 않습니다.

나는 그 과정이 실제로 너무 멀리 가고 있다고 생각하지 않습니다. 다음은 자신과 내 컴퓨터의 프로세스 스레드에 대한 프로세스 탐색기보기입니다.

그의 Windows 7 컴퓨터에서 :

Windows 7에서 프로세스 스레드

내 Windows 10 컴퓨터에서 :

Windows 10에서 프로세스 스레드

우리의 소프트웨어는 Visual Studio 2013을 64 비트 모드로 구축했습니다. MSVC 런타임이 포함되어 있습니다. 아마도 여러 기계에서 수년 동안 노력해 왔습니다.

무슨 일이야?

필요한 세부 정보를 추가하게되어 기쁘게 생각합니다.

업데이트 1 : 두 시스템에 대한 프로세스 모니터 추적 (* .pml 파일)이 있지만 해석 방법을 알고 있지만 어떤 결론을 얻을 수 있는지 잘 모르겠습니다. 살펴보고 싶은 사람? 민감한 정보가 포함되어 있다고 생각되면 여기에 게시하는 것이 주저합니다.

업데이트 2 :이 문제는 액세스 권한이있는 모든 Windows 7 컴퓨터에서 재현 할 수 있지만 다른 Windows 버전에서는 재현 할 수 없습니다.

업데이트 3 : 이전 릴리스 의 응용 프로그램은 Windows 7에서 제대로 작동하는 것으로보고되었지만 최신 릴리스 는 그렇지 않습니다. 애플리케이션을 빌드하거나 패키징하는 방식에는 변화가 없습니다.


@Thomas 사용자로부터 프로세스 모니터 추적을 받았습니다. 여기에 게시해도 안전합니까, 아니면 민감한 정보가 포함되어 있습니까?
François Beaune

필터에 따라 다릅니다. 경로, IP 주소 및 사용자 이름이 노출 될 수 있습니다. 여기에 전체 캡처를 게시하지 않았습니다
Thomas Weller

성공이 포함 된 줄에서 결과 열을 마우스 오른쪽 단추로 클릭하면 상황에 맞는 메뉴에서 "제외"를 선택하십시오. 이로 인해 잠재적 문제 목록 만 나타납니다.
Thomas Weller

누락 된 DLL의 문제는 감지 할 수 debugging.wellisolutions.de/procmonanalyzer 당신은 실행을 계속하는 것 같다 동안 일반적으로 프로그램이 충돌합니다 있지만 (.
토마스 웰러을

감사합니다 @Thomas. Windows가 일반적으로 (구성 요소 누락 등) 문제를 불평하고 어쨌든 우리는 수년 동안 문제없이 야생 으로이 소프트웨어를 배포 해왔으므로 DLL 누락이 아닙니다. 안티 바이러스 문제에 투표했습니다. 당신이보고 싶은 경우에 당신에게 흔적을 제공 할 수 있습니다.
François Beaune

답변:


1

다음은 Microsoft WinDbg 디버거에서 실행할 때의 출력입니다.

Break-in sent, waiting 30 seconds...
WARNING: Break-in timed out, suspending.
         This is usually caused by another thread holding the loader lock
(36a4.2fc8): Wake debugger - code 80000007 (first chance)

로더 잠금이 무엇인지 StackOverflow를 참조하십시오 .

이것은 실제로 프로그램의 시작 절차에서 매우 일찍 발생합니다.

콜 스택에서

0:000> k
 # Child-SP          RetAddr           Call Site
00 00000000`0020e9f8 00000000`771eaa78 ntdll!ZwWaitForKeyedEvent+0xa
01 00000000`0020ea00 00000000`771eabe2 ntdll!TppWaitpSet+0x1f1
02 00000000`0020eaa0 00000000`771ed0c4 ntdll!TppSetWaitInterrupt+0xa2
03 00000000`0020eb90 00000000`770bee49 ntdll!RtlRegisterWait+0x1e4
04 00000000`0020ec60 000007fe`d7252e98 kernel32!RegisterWaitForSingleObject+0x59
[...]
MSVCR120!Concurrency::critical_section::lock+0x2a [f:\dd\vctools\crt\crtw32\concrt\rtlocks.cpp @ 1031]
[...]
17 00000000`0020f790 00000000`00000000 ntdll!LdrInitializeThunk+0xe

따라서 교착 상태 일 수는 있지만 교착 상태 일 수는 없습니다. 스레드가 이전에 중요한 섹션을 잠그고 이제 다른 것을 기다리고 있습니다. 인수를 얻는 것이 쉽지 않기 때문에 x64에서는 말하기가 어렵습니다. 그렇지 않으면 대기 체인을 통과 할 수 있습니다.


왜 "더 이상 지원하지 않는 업그레이드"가 나타나는지 궁금하지 않습니다. 손가락에 "사용되지 않는"오류가 발생했을 때입니다. 마치 아, 그래서 클럽에 처음 왔고 컴파일을 바꾸기로 결정했는데 이제 세상이 당신에 따라 지원되지 않습니까?!
ejbytes

1

이 미스터리의 원인은 Boost C ++ Libraries 1.61 버전의 실제 버그 와 Windows 7의 일부 구현 세부 사항 의 조합으로 밝혀졌습니다 .

https://svn.boost.org/trac/boost/ticket/12475

이전 버전의 응용 프로그램 (1.4.0- 베타)은 Boost 1.55를 사용하고 있으며 버그의 영향을받지 않습니다. 최신 릴리스는 버그가있는 Boost 1.61을 사용하고 있습니다.


1
와줘서 고마워 우리는 비슷한 문제가 있었고이 힌트가 없으면 그것을 찾지 못했습니다!
PhilLab
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.