저희는 사용자를 위하여 번역된 내용을 제공하고 있습니다. 문법적 오류가 있더라도 양해바랍니다.
안녕하세요,
자세한 내용을 공유해 주셔서 감사합니다. 얼마나 답답하실지 정말 잘 알겠습니다. 충분히 이해합니다. C#으로 개발하는 경우(특히 MFC에서 전환하거나 관리자 권한 및 배포 관련 문제를 다룰 때) 예상치 못한 문제가 발생할 수 있습니다. 특히 어셈블리 명명 및 권한 문제와 관련하여 더욱 그렇습니다.
설명하신 내용을 보면 Windows에서 프로그램의 신원(이름, 위치, 때로는 메타데이터까지)이 SmartScreen이나 Windows Defender에서 엄격하게 모니터링되는 이상한 경계 상황에 처해 있는 것 같습니다. 특히 권한이 상승되지 않은 경우 실행 파일의 이름을 바꾸면 문제가 발생할 수 있습니다.
도움이 될 만한 몇 가지 생각:
프로그램 ID + SmartScreen
C# 어셈블리는 .NET 런타임과 매니페스트 메타데이터의 작동 방식 때문에 Windows 보안 계층에 더 "가시성"이 높습니다. 따라서 이름을 변경할 때는 다음과 같이 합니다.
Windows에서는 이를 다시 "알 수 없음" 또는 "신뢰할 수 없음" 실행 파일로 볼 수 있습니다.
코드 서명이나 관리자 권한 상승이 없다면 시스템 정책에 따라 샌드박스화되거나 차단되거나 자동으로 실패할 수 있습니다.
실망스럽지만, 이는 여러분의 잘못이 아닙니다. 이는 Windows 10 이후 Windows 보안 조치가 강화된 데 따른 결과입니다.
몇 가지 제안
불필요하게 실행 파일의 이름을 바꾸지 마세요.
여러 버전을 테스트하는 경우 덮어쓰기 대신 접미사를 붙이는 게 좋습니다(MyApp_Test.exe 등).
.exe 파일의 호환성 설정에서 "관리자 권한으로 이 프로그램 실행"을 설정해보세요.
마우스 오른쪽 버튼 클릭 > 속성 > 호환성 탭 > "관리자 권한으로 이 프로그램 실행"을 선택하세요. 이렇게 하면 실행 후에도 이 요구 사항이 유지될 수 있습니다.
고정된 실행 파일 이름과 폴더로 프로젝트를 다시 빌드한 다음 내부 버전 관리를 사용하는 것이 좋습니다.
이렇게 하면 Windows에서 해당 앱을 항상 "새로운 미지의 앱"으로 보지 않게 됩니다.
가능하다면 앱을 권한 상승으로 실행하는 작은 일괄 처리 스크립트나 런처를 만드세요.
아주 기본적인 것만으로도 개발 작업 흐름을 원활하게 하는 데 도움이 될 수 있습니다.
C# 프로젝트에서 app.manifest를 탐색하세요
수동으로 마우스 오른쪽 버튼을 클릭하지 않고도 매니페스트를 통해 직접 권한 상승을 요청할 수 있습니다.
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
특히 반복 작업과 테스트만 하고 싶을 때 이런 상황이 얼마나 속도를 늦출 수 있는지 충분히 이해합니다. 잘못한 건 없습니다. 단지 Windows가 위협으로부터 보호하기 위해 더 많은 방어벽을 구축하도록 진화했을 뿐입니다... 안타깝게도, 그로 인해 여러분 같은 합법적인 개발자들이 어려움을 겪을 때가 있습니다.
간소화하는 데 도움이 필요한 사항(매니페스트 설정, 실행 스크립트, 코드 서명 없이 해결하는 방법)이 있으면 기꺼이 함께 살펴보겠습니다.
한 번에 한 걸음씩 꾸준히 잘 해내고 있어요. 이제 최악의 시기는 거의 지나갔네요.