yourtablecloth / TableCloth

식탁보 프로젝트
GNU Affero General Public License v3.0
891 stars 54 forks source link

Windows 10 1909에서 식탁보로 샌드박스 실행시 "지정된 경로를 찾을 수 없습니다." 에러 발생 #5

Closed Hyolog closed 2 years ago

Hyolog commented 2 years ago

샌드박스 실행 버튼 클릭시 "지정된 경로를 찾을 수 없습니다." 에러 발생

case1

ScreenBuilder class process.Exited 핸들러에 breakPoint 잡아두고 실행 시 아래와 같이 샌드박스는 실행되지만 생성된 assets 폴더가 의도하지 않은 위치에 생성되는 것 같습니다.

case2

빌드환경 : Visual Studio version : community 2019 16.8.5

문제 발생시 설정 정보 : 재현

rkttu commented 2 years ago

혹시 브레이크 포인트를 어떻게 잡았을 때 발생하는 상황인지 좀 더 자세히 설명해주실 수 있을까요? 재현이 쉽지 않아서 도움이 필요합니다. 🙏

Hyolog commented 2 years ago

에러 팝업창은 브레이크 포인트와 별개로 샌드박스 실행시 바로 발생했습니다.

https://user-images.githubusercontent.com/14173879/127774079-7682a5bc-0b89-4bcc-8eb4-b9d753cb4ddc.mp4

브레이크 포인트는 ScreenBuilder class line 321에 걸고 테스트 했습니다.

https://user-images.githubusercontent.com/14173879/127774097-1263e8a4-4397-4d72-8f4d-0d1410dc8881.mp4

rkttu commented 2 years ago

친절하게 동영상으로 보여주셔서 감사합니다. 🙏

같은 위치에 브레이크 포인트를 걸어봐도 제 경우에는 재현이 되지 않았습니다. 😢

그런데 브레이크 포인트와는 무관하게 제 경우에는 YesSign (금융결제원) 인증서 가져오기를 하려고 했을 때 이상이 없었는데, 사용하시는 인증서는 한국정보인증 (KICA) 인증서일 때 생기는 현상이 아닌가 싶습니다.

현재 NPKI 내에서 사용자 디렉터리를 유추하는 부분은 인증서 파일의 메타데이터를 읽어 발급자 정보를 가지고 디렉터리를 완성하도록 코딩이 되어있는데, 이 부분이 인증서 발급 업체에 따라 규칙에 맞지 않는 부분이 있는 것 같습니다.

인증서 가져오기를 시도하면서 실패하는 것과 제보해주신 문제가 관련이 있지 않는가 생각하여, 공동인증서 발급 업체 몇 곳을 좀 더 테스트해보면서 진단을 해보겠습니다.

Hyolog commented 2 years ago

마침(?) YesSign (금용결제원) 인증서도 있어 해당 인증서로 다시 시도해보았으나 같은 문제가 발생했습니다. 참고차 기록 남깁니다.

rkttu commented 2 years ago

녹화해주신 동영상에서 처음에 인증서 검색을 자동으로 수행하면서 처리되지 않은 예외가 발생하는 것같이 보여, 정확한 상황을 남기기 위한 structured logging을 추가해서 main 브랜치에 커밋했습니다. (동시에 전반적으로 코드 리팩토링을 같이 진행했습니다.)

혹시 %userprofile%\AppData\Local\TableCloth\ApplicationLog.jsonl 파일에 어떻게 기록이 남는지 볼 수 있으면 좋을 것 같습니다. 🙏

Hyolog commented 2 years ago

커밋해주신 내용 받아 실행시켜 보았는데 말씀해주신 경로 파일의 크기가 0 입니다. 이번에 추가해주신 catch 구문들(로깅하는 부분)에 break point를 걸고 확인해보니 예외가 발생하지 않습니다. (이후 [샌드박스 실행] 버튼 클릭시 문제는 그대로 재현되었습니다.)

level120 commented 2 years ago

@Hyolog 혹시 그냥 Sandbox를 실행했을 때는 정상 실행이 되나요? 제가 예전에 만났던 상황이랑 비슷한 것 같은데 그냥 Sandbox를 검색해서 실행했을 때 동작하지 않는다면 아마 윈도우즈 버그가 의심됩니다. 이 경우 특정 조건을 만족할 때만 저 오류 메시지가 나타나는데 그 특정 조건이 뭔지는 모르겠습니다.. 어느날은 잘 동작하는데 또 어떤날은 재부팅하자마자 바로 켰는데도 저 오류를 만날때가 있었습니다.

Hyolog commented 2 years ago

@level120 C:\Windows\System32\WindowsSandbox.exe 실행 시 정상 실행됩니다. 0x80070003 error 관련 잠깐 찾아봤을 때 재부팅 얘기가 있어 몇 차례 기기 재부팅 후 재시도 해보았으나 매번 같은 문제가 발생했었습니다. (지금도 다시 한번 해봤는데 동일합니다.) 참고차 링크 남깁니다

rkttu commented 2 years ago

@Hyolog 의심이 가는 부분들을 짚어보면서 보완하는 코드를 넣긴 했지만, 재현이 쉽지 않아서 05866b0 커밋을 기준으로 다음의 정보를 살펴보고 싶습니다.

또한, 이제 샌드박스 데이터 디렉터리는 임시 경로가 아니라 LocalAppData에 만들도록 변경했습니다. 확실한 것은 아니나, Path.GetTempPath API로 임시 디렉터리 경로를 가져오고, 여기에 파일을 만들면 간혹 안티바이러스나 보안 관련 에이전트들이 임시 파일 생성을 방해했던 사례를 경험한 적이 있어 적용한 변경 사항입니다.

Hyolog commented 2 years ago

@rkttu 05866b0 pull 후 동일한 스텝 반복시 별도의 메시지 박스 표시는 없었습니다. WSB 파일과 디렉터리 사본은 깃허브 프로필 e-mail로 전달 드렸습니다.

rkttu commented 2 years ago

@Hyolog 보내주신 파일 잘 받았습니다. 그런데 정말 이상하군요. 🤔

인증서 부분만 제 인증서를 사용하도록 만들고, 나머지는 디렉터리 경로를 동일하게 만들어 WSB 파일을 직접 띄워봤을 때에도 역시 재현되지 않습니다. 혹시 식탁보를 거치지 않고 WSB 파일을 직접 실행했을 때도 0x80070003 오류가 발생하는지 알 수 있을까요?

image image

Hyolog commented 2 years ago

제 인증서(KICA)를 사용하여 InternetBankingSandbox.wsb 직접 실행시에 재현됩니다. (직접 실행해서 0x80070003 에러 팝업이 아닌 아래와 같이 샌드박스 내에서 에러 팝업이 보여집니다.)

error_cap

참고 차 YesSign 인증서를 사용해 같은 스텝을 반복해보았고 결과는 동일합니다.

rkttu commented 2 years ago

wsb 파일의 설정대로면 바탕화면이 아니고 c:/asset 폴더에 마운트가 되어야하는데 정말 이상한 일이네요. 혹시 사용하시는 윈도우 10의 빌드 번호를 알 수 있을까요?

Hyolog commented 2 years ago

Windows 10 Enterprise 버전 1909(OS 빌드 18363.1679) 입니다.

rkttu commented 2 years ago

@Hyolog 보내주신 샌드박스 파일로 재현되는 것을 확인했습니다. Windows 10 Enterprise 1909 (OS 빌드 18363.1621)에서 확인되는 문제이며, 한 번 둘러보겠습니다.

image

rkttu commented 2 years ago

@Hyolog Windows Sandbox에 대해서 좀 더 찾아보니, MappedFolders에 샌드박스 폴더 내의 경로를 지정하는 것은 Windows 10 2004 (19042) 빌드 이상에서만 지원되는 기능으로 보입니다.

https://docs.microsoft.com/en-us/windows/whats-new/whats-new-windows-10-version-2004#virtualization

MappedFolders now supports a destination folder. Previously no destination could be specified, it was always mapped to the Sandbox desktop.

Windows 10 1909 및 그 이전 버전을 위한 Workaround를 추가로 개발해야 이 문제가 해결될 것 같습니다.

일단 이 이슈는 계속해서 Open 상태로 유지해주시면 정식 릴리스 전까지 집중적으로 개발을 진행해보겠습니다.

감사합니다!

rkttu commented 2 years ago

~(기록용) 인증서가 자동 검색되지 않아서 직접 선택하는 경우 샌드박스 파일에 제대로 기록되지 않는 버그가 있음. 같이 수정 필요.~

원인을 추적해보니 WindowsSandbox.exe가 윈도우 10 1909 버전의 경우 샌드박스를 실행할 때까지 끝까지 남지 않아 일찍 종료된 것으로 처리되어 식탁보의 Process.Exited 이벤트 핸들러가 먼저 불렸기 때문에 Asset 폴더가 지워지고, 그 후에 Sandbox에서 Asset 폴더 안의 데이터를 찾으려고 하면서 파일이 없다는 오류 메시지가 나타난 것이었습니다.

이 문제는 앞에서 발견된 문제와 별개 문제로 역시 같이 해결 방법을 찾아보겠습니다.

rkttu commented 2 years ago

@Hyolog 7e82799 커밋을 기준으로 경험하시던 문제들이 어떤지 알려주시면 감사하겠습니다.

Hyolog commented 2 years ago

@rkttu (KICA, YesSign) x (우리은행, KB국민은행) 총 4가지 케이스로 테스트 해보았고 이슈는 발생하지 않았습니다. 아래는 YesSign x KB국민은행 실행화면 샘플입니다. 참고차 첨부합니다.

YesSign_KB

rkttu commented 2 years ago

@Hyolog 프로젝트에 기여해주셔서 감사합니다. 이 이슈와 연결된 문제들은 우선 해결된 것으로 보고 닫도록 하겠습니다. 추후에도 이슈가 있으면 새 이슈 또는 기존 이슈를 열어주시면 감사하겠습니다. 고맙습니다. 👍