>  기사  >  백엔드 개발  >  CreateProcessAsUserW()를 사용하여 서비스에서 시작할 때 WerFault 불일치로 인해 Windows 계산기 응용 프로그램이 충돌합니다.

CreateProcessAsUserW()를 사용하여 서비스에서 시작할 때 WerFault 불일치로 인해 Windows 계산기 응용 프로그램이 충돌합니다.

PHPz
PHPz앞으로
2024-02-05 22:51:071201검색

使用 CreateProcessAsUserW() 从服务启动时,Windows 计算器应用程序会因 WerFault 不一致而崩溃

질문 내용

Windows 서비스는 Go로 작성되었으며 CreateProcessAsUserW()를 사용하여 사용자 컨텍스트에서 계산기 프로세스를 생성하려고 합니다.

코드는 다음 요점에서 영감을 받았습니다:

https://gist.github.com/LiamHaworth/1ac37f7fb6018293fc43f86993db24fc#file-native-go

대부분의 경우 계산기 앱은 활성 사용자에서 실행되지만 때로는 CreateProcessAsUserW() 오류가 반환되지 않고 앱이 실행되지 않습니다.

Procmon을 사용한 검사 결과 계산기 애플리케이션을 시작하면 애플리케이션이 충돌하고 WerFault 덤프를 수집하는 것으로 나타났습니다. 불행하게도 이벤트 로그에 자세한 덤프가 표시되지 않습니다.

ProcMon에서 관찰된 WerFault 충돌

CreateProcessAsUserW를 사용하여 3개의 유사한 계산기 앱을 실행하기 위한 자세한 스택 추적 - 처음 두 개는 성공했고 세 번째는 실패했습니다

이 오류는 본질적으로 무작위로 발생하므로 애플리케이션을 안정적으로 만들 수 없습니다. 나는 여기에서 무엇을/어떻게 디버깅해야 하는지 전혀 모르고 도움을 주시면 정말 감사하겠습니다.


정답


x64로 생성된 바이너리가 arm64에서 실행되는 잘못된 컴파일 환경으로 인해 오류가 발생하는 것 같습니다. 모든 사람의 의견에 감사드립니다

위 내용은 CreateProcessAsUserW()를 사용하여 서비스에서 시작할 때 WerFault 불일치로 인해 Windows 계산기 응용 프로그램이 충돌합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제