Windows 탐색기와 일치하도록 ftype 및 assoc을 얻으려면 어떻게 해야 합니까?

Windows 탐색기와 일치하도록 ftype 및 assoc을 얻으려면 어떻게 해야 합니까?

.pyWindows 탐색기를 통해 파일을 시작할 때 사용하도록 연결을 변경했습니다 .

  1. 도구 -> 폴더 -> 파일 형식.
  2. 그런 다음 로 이동합니다 .py.
  3. 연결을 워드패드로 변경합니다.

이제 명령줄에 py 파일 이름을 입력하면 워드패드가 해당 파일을 엽니다.

그러나 명령줄에서는 여전히 다음을 반환합니다 assoc.ftype

C:\> assoc .py
.py = Python.File

C:\> ftype Python.File
Python.File = "C:\Program\Python27\python.exe" "%1" %*

협회가 일을 하고 있는데 왜 그걸 모르고 있나요 assoc?ftype

프롬프트를 다시 시작했습니다.


내 레지스트리의 추가 정보:

HKEY_CLASSES_ROOT\.py
= Python.File

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\Application
= wordpad.exe

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\OpenWithProgids\Python.File
= 

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.py\(Standard)
= Python.File

더 많은 레지스트리:

HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command\(Standard)
= "C:\Program\Python27\python.exe" "%1" %*`

나는 이것이 에 나타나는 것이라고 생각합니다 ftype Python.File. 하지만 익숙해지지는 않는 것 같습니다.


(테스트를 위해 이 작업을 수행하므로 결국 Python의 기본 버전을 쉽게 선택할 수 있습니다.)

답변1

파일을 호출하는 방법에 따라 어떤 동사가 사용되는지에 따라 달라집니다. 사용하는 동사에 따라 Windows에서 수행할 작업이 결정됩니다. 표준 동사는 열기, 편집, 인쇄, 재생 및 미리보기입니다. 그러나 다음이 가능합니다.나만의 동사 만들기. 가장 일반적으로 추가되는 동사는가족과 함께 열기(OpenWithProgID 포함), "다음으로 열기" 아래에 작은 컨텍스트 하위 메뉴를 추가하여 가능한 대안을 제공합니다. 예를 들어 Paint.NET을 설치한 다음 .jpg 파일을 마우스 오른쪽 버튼으로 클릭하면 연결 프로그램 항목이 Paint.NET, 그림판 및 Microsoft에서 해당 버전에 대해 사진 뷰어라고 부르는 항목이 나열된 하위 메뉴로 확장되는 것을 볼 수 있습니다. Windows의.

또한 Unsigned Code Labs가 말한 내용은 매우 중요합니다. 클래스를 디버깅할 때 HKLM\Software\Classes\및 를 살펴봐야 합니다 HKCU\Software\Classes. HKCR시스템을 쿼리하는 데는 매우 유용하지만 시스템이 오작동하는 이유를 알아내는 데는 그리 좋지 않습니다.

Windows 7 시스템에서 을 사용하여 약간의 테스트를 수행했는데 procmon.exeassoc명령 ftype이 에 직접 쓰려고 시도한 것으로 나타났습니다 HKCR. 시스템에서는 이를 에 쓰는 것으로 분명히 해석했습니다 HKLM. 내 현재 계정은 관리자 그룹의 구성원이지만 UAC가 활성화되어 있습니다. 시도했을 때 액세스가 거부되었습니다 assoc .mytest=MyTest.File.

test.mytest이상하게도 이라는 파일을 마우스 오른쪽 버튼으로 클릭 하고 메모장과 연결하여 연결을 생성하면 이 연결이 표시되지 assoc도 않습니다 . ftype협회는 확실히 HKCU및 에 있습니다 HKCR. 그러나 재부팅을 시도하지 않았습니다.

답변2

레지스트리와 ftype 및 assoc에 나타나는 항목을 어떻게 일치시킬 수 있는지 모르겠습니다. 나에게 그리고 내가 보기에도 ftype 및 assoc 명령은 쓸모가 없습니다. 프로그래밍 방식(표준 및 탐색기를 사용하는 보다 간단한 방법과 비교)으로 특정 확장에 대한 기본 프로그램을 변경하기 위해 수행하는 작업은 이 레지스트리 키를 수정하는 것입니다.

HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.TheExtensionYouWantToModify\UserChoice\ProgID

예를 들어, mplayer로 mp3를 열고 싶다면

HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3\UserChoice\ProgID 

"mplayerc.mp3"의 값

이 작업의 복잡성은 무엇입니까? 먼저 유효한 ProgID를 알아야 하며(ftype 사용) 두 번째로 해당 하이브에 대한 쓰기 액세스 권한이 필요합니다. Windows는 UserChoice 키에 대한 거부 ACL을 자동으로 설정하므로 쓰기 액세스 권한을 얻으려면 해당 거부 규칙을 제거하는 방법을 찾아야 합니다. 저는 여기에서 다운로드할 수 있는 subinacl 프로그램을 사용합니다.http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=en권한을 수정합니다. 또한 타사 프로그램 SetACL을 사용할 수도 있습니다. 구문이 훨씬 더 간단하기 때문에 첫 번째를 권장합니다.

답변3

Microsoft는 Windows 8부터 이 작동 방식을 변경했습니다. 이를 변경하기 위해 더 이상 레지스트리를 편집할 수 없습니다. 에게마이크로소프트 인용:

Pre-Win 8에서는 앱이 레지스트리를 조작하여 파일 형식/프로토콜에 대한 기본 처리기를 설정할 수 있었습니다. 즉, 레지스트리를 조작하는 스크립트나 그룹 정책을 쉽게 가질 수 있다는 의미입니다. 그러나 Win 8에서는 앱에 의한 변조를 감지하는 해시(사용자 및 앱별로 고유)를 통해 레지스트리 변경 사항이 확인됩니다. 유효한 해시가 없으면 레지스트리의 기본값을 무시합니다.

Microsoft가 이를 변경하기를 기대하는 방식은 그룹 정책을 통해 구현되는 xml 파일을 사용하는 것입니다. 지침여기.

고맙게도 Christoph Kolbicz는 해싱 알고리즘을 역설계하여 다음과 같은 도구를 만들었습니다.SetUserFTA파일 형식 연결을 설정합니다. 불행히도 비공개 소스입니다.

답변4

여기서 혼란은 사용되는 것 사이에 있습니다.열려 있는파일과 그 용도달리다파일. 레지스트리 키

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\Application
\.py\Application

창에 파일을 여는 방법을 알려주는 것입니다. 파일을 두 번 클릭하면 이 응용 프로그램으로 파일이 열립니다.

파일이 실행 파일이 아니기 때문에 명령줄은 사용자가 파일을 두 번 클릭한 것처럼 기본 응용 프로그램으로 파일을 열 것이라고 가정합니다.

연결을 다시 C:\Program\Python27\python.exe로 변경하거나 Python을 가리키도록 레지스트리 키를 편집하면 이전 상태로 돌아가야 합니다. 여기서 Windows에서는 기본 프로그램으로 파일을 열 것이라고 가정합니다. python.exe, 그러면 프로그램이 실행됩니다.

관련 정보