sn.exe를 사용한 ‘액세스 거부’ 오류 문제 해결

.NET 어셈블리 작업 시, 강한 이름으로 안전하게 서명하는 것은 라이브러리의 무결성과 독특성을 유지하는 데 매우 중요합니다. 그러나 많은 개발자는 Strong Name Tool(sn.exe)을 사용하여 새 키를 생성하려고 할 때 불행히도 ‘액세스가 거부되었습니다’ 오류를 경험합니다. 이 오류는 Windows XP와 같은 이전 운영 체제에서 동일한 작업이 문제없이 작동하는 경우에도 Windows Vista와 같은 최신 플랫폼에서 실패할 때 특히 혼란스럽습니다.

이 블로그 포스트에서는 ‘액세스 거부’ 오류의 원인을 이해하고 중단 없이 개발을 계속할 수 있도록 종합적인 솔루션을 제공하겠습니다.

오류 이해하기

명령 프롬프트나 PowerShell에서 다음과 같은 명령을 실행할 때:

sn -k keypair.snk

아래와 같은 오류를 만날 수 있습니다:

강한 이름 키 쌍을 생성하지 못했습니다 -- 액세스가 거부되었습니다.

이는 도구가 사용자 계정 또는 파일 권한으로 인해 필요한 키 쌍을 생성할 수 없음을 나타냅니다.

일반적인 원인

  1. 사용자 액세스 제어(UAC): Windows Vista는 사용자에게 수행할 수 있는 작업에 대한 stricter control을 시행하는 UAC를 도입했습니다, 특히 관리 작업과 관련하여.
  2. 파일 권한: 키가 저장되는 키 컨테이너에 대해 사용자 계정이 필요한 권한이 부족할 수 있습니다.

‘액세스 거부’ 오류를 해결하기 위한 솔루션

이 문제를 해결하려면 아래 단계를 따르십시오:

1. 사용자 계정 권한 확인

사용자 계정이 키 컨테이너 디렉터리에 접근할 수 있는지 확인하십시오. 키는 일반적으로 다음에 저장됩니다:

C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys

권한 부여

  • 위에서 설명한 폴더로 이동합니다.
  • MachineKeys 폴더를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.
  • 보안 탭에서 사용자 계정이 나열되어 있는지 확인합니다.
  • 없다면, 편집을 클릭하여 사용자 계정을 추가하고 최소한 읽기쓰기 권한을 부여하도록 하십시오.

2. 명령 프롬프트 관리자 권한으로 실행

PowerShell과 명령 프롬프트를 관리자 권한으로 실행해 보았다고 언급하셨지만, 올바르게 실행하고 있는지 확인하십시오:

  • 명령 프롬프트(또는 PowerShell)를 마우스 오른쪽 버튼으로 클릭하고 관리자로 실행을 선택합니다.
  • 이 단계는 사소하게 보일 수 있지만, 키 쌍을 생성하는 것과 관련된 권한에는 중요합니다.

3. 사용자 액세스 제어(UAC) 임시 비활성화

위 단계로 문제가 해결되지 않는 경우, UAC를 임시로 비활성화하여 문제가 원인인지 확인할 수 있습니다:

  1. 제어판을 엽니다.
  2. 사용자 계정을 클릭합니다.
  3. 사용자 계정 제어 설정 변경을 선택합니다.
  4. 슬라이더를 알리지 않음으로 내리고 확인을 클릭합니다.
  5. 시스템을 재시작하고 sn.exe 명령을 다시 실행해 봅니다.

참고: UAC를 비활성화하면 컴퓨터가 불필요한 위험에 노출될 수 있습니다. 작업을 완료한 후에는 반드시 다시 활성화하십시오.

결론

sn.exe를 사용하여 .NET 어셈블리를 서명하는 동안 ‘액세스 거부’ 오류 코드를 만나셨다면 실망하지 마십시오. 위에 나열된 단계를 따르면 접근 권한을 회복하고 강한 이름 키 쌍을 성공적으로 생성할 수 있습니다. 항상 사용자 권한을 확인하고 응용 프로그램을 상승된 권한으로 실행하는 것의 의미를 염두에 두어야 합니다.

행복한 코딩 되십시오! 다른 질문이 있거나 추가 문제가 발생하면 아래 댓글로 문의해 주십시오.