![협회의 작동 방식](https://rvso.com/image/1317520/%ED%98%91%ED%9A%8C%EC%9D%98%20%EC%9E%91%EB%8F%99%20%EB%B0%A9%EC%8B%9D.png)
파일 연결에 문제가 있습니다. 내 C# 애플리케이션은 사용자가 사용하는 프로젝트 파일을 두 번 클릭하면 내 앱이 열리고 파일이 로드되도록 자체 확장명에 대한 파일 연결을 설정할 수 있습니다.
이로 인해 두 개의 타사 구성 요소에 문제가 발생합니다. 각각 라이센스를 사용합니다.
두 번 클릭을 사용하면 두 구성 요소 모두에 대한 라이센스 대화 상자가 나타납니다. 실행 파일에서 앱을 실행할 때는 이런 일이 발생하지 않습니다. 적절한 파일을 앱 바로가기로 드래그하면 앱이 해당 파일과 함께 시작되고 라이선스 대화상자가 나타나지 않습니다.
따라서 Windows에서 파일 연결 작업을 실행하는 방식에 문제가 있다고 결론을 내릴 수 있습니다.
라이센스 코드를 생성한 사람들은 실행 파일 이름이 변경되어 라이센스 코드가 이를 거부하는 것이 문제일 가능성이 높다고 말했습니다. 나는 이것이 파일 이름을 포함하는 인수와 관련이 있다고 가정할 수 있습니다.
내 코드에서 중단점을 통해 코드 실행을 포착하려고 시도했지만 중단점이 실행되는 첫 번째 줄에 있더라도 이를 실행할 수 없습니다. Windows가 수행하는 모든 작업은 해당 지점을 통과합니다.
답변1
협회의 작동 방식
Windows 탐색기에서 파일을 두 번 클릭하면 Windows 셸은 레지스트리에서 파일 확장자를 조회하여 확장명이 등록되어 있는지 확인합니다. 확장명이 등록되지 않은 경우 Windows는 연결 프로그램 대화 상자를 표시하여 사용자가 파일 형식과 연결할 응용 프로그램을 선택할 수 있습니다. 확장이 등록되면 Windows는 "open" 명령을 사용하여 ShellExecute() 함수를 호출합니다. 또한 두 번 클릭한 파일의 이름을 명령줄 매개변수로 전달합니다.
그러나 연결은 단순히 파일을 여는 것 이상입니다. 탐색기에서 텍스트 파일(.TXT)을 마우스 오른쪽 버튼으로 클릭하면 상황에 맞는 메뉴 상단에 두 개의 항목이 표시됩니다. 첫 번째 이름은 Open입니다. 이 메뉴 항목을 선택하는 것은 탐색기에서 파일을 두 번 클릭하는 것과 같습니다. 열기를 선택하면 선택한 파일이 로드된 상태로 NOTEPAD.EXE가 시작됩니다(기본 Windows 설치 가정). 두 번째 메뉴 항목은 인쇄입니다. 이 메뉴 항목을 클릭하면 메모장이 전혀 표시되지 않고 파일이 인쇄됩니다.
다른 파일 형식은 탐색기의 상황에 맞는 메뉴에 더 많은 항목을 표시합니다. 예를 들어 Microsoft PowerPoint 파일을 마우스 오른쪽 버튼으로 클릭하면 열기, 새로 만들기, 인쇄 및 표시라는 컨텍스트 메뉴 항목이 표시됩니다. 특정 파일 형식에 대한 상황에 맞는 메뉴에 표시되는 항목은 레지스트리에서 가져옵니다.
Windows에서 파일 연결을 만드는 방법에는 최소한 두 가지가 있습니다. 한 가지 방법은 Windows 탐색기에서 파일을 마우스 오른쪽 버튼으로 클릭하고 상황에 맞는 메뉴에서 연결 프로그램...을 선택하는 것입니다. 그렇게 하면 Windows에 연결 프로그램 대화 상자가 표시됩니다. 당연히 이 방법에는 사용자 개입이 필요합니다. 애플리케이션을 배포할 때 사용자가 파일 연결을 수동으로 설정하도록 강요하고 싶지 않을 것입니다.
연결을 만드는 더 좋은 방법은 응용 프로그램에서 다양한 레지스트리 항목을 만드는 것입니다. 좋은 설치 프로그램은 레지스트리 항목을 자동으로 만들어 주지만 프로세스에 대한 더 많은 제어가 필요한 경우가 있습니다.
협회 등록
파일 연결을 등록하려면 두 개의 별도 레지스트리 키를 만들어야 합니다. 두 키 모두 HKEY_CLASSES_ROOT
레지스트리 섹션 에 생성됩니다 .
파일 확장자 키
첫 번째 키는 파일 확장자의 이름이며 앞에 점이 표시됩니다.
HKEY_CLASSES_ROOT\.zzy
프로덕션 애플리케이션에서는 새 키를 생성하기 전에 레지스트리를 확인하여 키가 존재하지 않는지 확인해야 합니다. 키가 이미 존재하는 경우 애플리케이션은 사용자에게 파일 연결을 바꾸라는 메시지를 표시하거나 다른 파일 확장자를 사용할 준비를 해야 합니다.
이 키의 값은 생성할 두 번째 키에 연결됩니다. 실제로는 두 번째 키의 이름입니다. 예제 프로그램에서는 이 키에 "Test App File"이라는 값을 지정했습니다. 이 값은 무엇이든 선택할 수 있지만 첫 번째 키와 마찬가지로 해당 키가 레지스트리에 이미 존재하지 않는지 확인해야 합니다.
애플리케이션 연결 키
두 번째 키는 첫 번째 키의 기본값과 이름이 동일합니다.
HKEY_CLASSES_ROOT\Test App File
이 키에는 하위 키가 하나 이상 있어야 합니다. Windows는 응용 프로그램을 실행할 때 이 하위 키를 사용합니다. 전체 키는 다음과 같이 구성됩니다.
HKEY_CLASSES_ROOT
Test App File
shell
open
command
명령 키에 제공된 문자열은 응용 프로그램의 전체 경로와 파일 이름, 그 뒤에 오는 문자열입니다.%1. 예를 들어:
C:\MyApp\MyApp.exe %1
Windows가 응용 프로그램을 시작하면%1기호를 Windows 탐색기에서 두 번 클릭한 파일의 경로와 파일 이름으로 바꿉니다. 이 값은 명령줄 매개변수로 애플리케이션에 전달됩니다.
추가 키
파일 연결 키 아래에 만들 수 있는 다른 하위 키가 있습니다. 그러한 열쇠 중 하나가 DefaultIcon
열쇠입니다. 이 키는 Windows 셸이 등록된 유형의 파일 옆에 표시할 아이콘을 지정하는 데 사용됩니다. 파일 형식이 하나만 등록되어 있고 해당 파일 형식이 응용 프로그램 아이콘을 사용해야 하는 경우에는 이 키가 필요하지 않습니다. DefaultIcon 키 값이 기본 애플리케이션 아이콘을 지정하는 연결을 찾는 방법은 다음과 같습니다.
C:\MyApp\MyApp.exe,0
이는 응용 프로그램의 EXE 파일에 있는 첫 번째 아이콘이 파일 연결의 표시 아이콘으로 사용되어야 함을 지정합니다. 응용 프로그램에 두 개 이상의 파일 형식이 있는 경우 쉼표 뒤에 오는 아이콘 색인을 변경하여 다른 아이콘을 지정할 수 있습니다. 예를 들어 C++Builder에는 프로젝트 파일, 양식 파일, 소스 파일 등에 대한 아이콘이 있습니다. 아래의 레지스트리를 보면 HKEY_CLASSES_ROOT\BCBProject\DefaultIcon
프로젝트 파일의 아이콘이 아이콘 인덱스 4(적어도 C++Builder 4의 경우)임을 알 수 있습니다.
사용자가 문서를 인쇄할 수 있도록 하려면 열기 하위 키 외에 인쇄 하위 키를 추가하면 됩니다. print 하위 키의 값은 한 가지 예외를 제외하고 open 하위 키의 값과 유사합니다.
C:\MyApp\MyApp.exe /p %1
이 값에는 다음과 같은 명령줄 스위치가 있습니다./피애플리케이션 이름과%1상징. 귀하의 애플리케이션은 다음을 감시할 수 있습니다./피전환하고, 스위치가 감지되면 적절한 조치를 취하십시오.
특정 파일 형식에 대해 원하는 만큼 하위 키를 추가할 수 있습니다. 각 하위 키의 이름은 탐색기 상황에 맞는 메뉴에 나타납니다. 응용 프로그램이 선택된 상황에 맞는 메뉴 항목을 식별할 수 있도록 각 명령 유형에 대해 명령줄 스위치를 추가하기만 하면 됩니다. 하위 키에 기본값을 제공하면 Windows는 상황에 맞는 메뉴 항목 텍스트로 해당 텍스트를 사용합니다. 기본값을 제공하지 않으면 Windows는 메뉴 항목에 키 이름 자체를 사용합니다.
모든 정보는 다음에서 가져옵니다.기사.