Windows 탐색기와 일치하도록 ftype 및 assoc을 어떻게 얻습니까?


20

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

  1. 도구-> 폴더-> 파일 유형.
  2. 그런 다음로 이동하십시오 .py.
  3. 연결을 워드 패드로 변경하십시오.

이제 명령 줄에 py 파일 이름을 입력하면 Wordpad가 열립니다.

그러나 assocftype명령 줄에서 여전히 다음을 반환합니다 :

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을 쉽게 선택할 수 있습니다).


답변:


9

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

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

와 함께 Windows 7 시스템에서 약간의 테스트를 수행 procmon.exe했으며 assocand ftype명령은에 직접 쓰려고 시도하는 것처럼 보이며 HKCR시스템은이를 씁니다 HKLM. 내 현재 계정은 관리 그룹의 구성원이지만 UAC가 활성화되어 있습니다. 시도 할 때 액세스가 거부되었습니다 assoc .mytest=MyTest.File.

이상하게도, 파일을 마우스 오른쪽 단추로 클릭하고 test.mytest메모장과 연결 하여 연결을 만들면 이 연결 assocftype볼 수 없습니다 . 협회는에 확실히 존재 HKCU하고 HKCR. 그러나 재부팅을 시도하지 않았습니다.



@ TheIncorrigible1 링크가 죽었습니다 :(
DaveInCaz

@DaveInCaz 아, 정말 슬프다. 나는 그들이 모든 MSFT 블로그 링크를 깨뜨린 것에 대해 화가났다. 복원 할 수 있는지 살펴 보겠습니다. 잘만되면 그것은 단지 새로운 연결을 가지고 있고 사라지지 않았다 (다른 것들의 경우처럼)
TheIncorrigible1


5

레지스트리와 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을 설정하므로 쓰기 액세스 권한을 얻으려면 해당 거부 규칙을 제거하는 방법을 찾아야합니다. 여기에서 http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=en 에서 다운로드 할 수있는 subinacl 프로그램을 사용하고 있습니다 . 또한 타사 프로그램 SetACL을 사용할 수 있습니다. 구문이 훨씬 간단하기 때문에 첫 번째 권장 사항입니다.


3

탐색기 (Windows 셸)는 항상 확장 프로그램 기본값에 지정된 공급 업체 키에 지정된 응용 프로그램을 우선적으로 사용합니다. (귀하의 경우 .py확장 Python.File은 공급 업체 키입니다.)

ftype그리고 assoc다른 지역에서 그 값을 읽을 수 있습니다, 나는 확실히 모른다. 이것이 Explorer가하는 방식입니다.

편집 : 이 페이지는 당신에게 관심이있을 수 있습니다 : MSDN-파일 형식

특히 이것은 :

HKEY_CLASSES_ROOT 하위 트리는 HKEY_CURRENT_USER \ Software \ Classes 및 HKEY_LOCAL_MACHINE \ Software \ Classes 를 병합하여 형성된보기 입니다.

HKEY_LOCAL_MACHINE에 "기본"연결이 있으면 계정에서 정의한 연결 (HKEY_CURRENT_USER에 저장 됨)에 의해 무시되는 Windows의 여러 부분이 충돌하는 것일 수 있습니다.


3

Microsoft는 Windows 8부터 작동 방식을 변경했습니다. 더 이상 레지스트리를 편집하여 변경할 수 없습니다. Microsoft인용 하려면 :

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

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

고맙게도 Christoph Kolbicz는 해싱 알고리즘을 리버스 엔지니어링 하고 파일 유형 연결을 설정하기 위해 SetUserFTA 라는 도구를 만들었습니다 . 불행히도 그것은 폐쇄 소스입니다.


SetUserFTA는 매우 유용하며 스크립팅 할 수 있습니다.
DaveInCaz

1

여기서 혼동은 파일 을 여는 데 사용되는 것과 파일을 실행 하는 데 사용되는 것입니다 . 레지스트리 키

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

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

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

연결을 C : \ Program \ Python27 \ python.exe로 다시 변경하거나 python을 가리 키도록 레지스트리 키를 편집하면 원래 상태로 되돌려 야합니다. python.exe는 프로그램을 실행합니다.


내가 올바르게 이해하면 키 .py\Application는 py 파일을 여는 데 사용됩니다. 내가 이해하지 못하는 것은 어떤 경우에 가치 Python.File가 사용 되는지 입니다.
Gauthier

Majenko에 따르면 그것은 확장 프로그램이 실행 파일과 같이 Windows에 의해 처리되는 주어진 날씨에 달려 있습니다 ( PATHEXT변수 참조 ). 그러나 과거에는 탐색기 내에서 만든 동료가 항상 Classes레지스트리 키 에서 해당 동료를 덮어 쓴 것을 읽었습니다 .
Piotr Dobrogost

1

목적과 위치에 대한 가장 큰 힌트는 "큰 유형", 즉 해당 두드러기의 이름입니다 : HKLM 및 HKCU

파일 연결은 두 두드러기에 설정되며 두 가지 다른 목적이 있습니다.

이름에서 알 수 있듯이 HKCU 레지스트리 항목은 CURRENT USER에 대한 파일 연결을 설정하고 HKLM의 해당 파일 유형 설정을 대체합니다.

HKLM은 LOCAL MACHINE, 즉 머신의 모든 사용자에 대한 파일 연관을 설정합니다 (HKCU 항목으로 대체되지 않는 한). (Win98의 경우 HKCR은 HKLM \ Software \ Classes의 약칭 별칭 일뿐입니다. 개별 하이브가 아니거나 다른 하이브가 아니 었습니다. 그러나 이것은 Win XP에서 변경되었으며 더 이상 사실이 아닙니다. HKCR은 이제 병합의 결과 인 가상 하이브입니다. HKCU \ Software \ Classes \, HKCU \ Software \ Classes \ 및 HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts 키 (HKCU 정보가 우선)

이 2 단계 시스템은 일대일뿐만 아니라 일대일 및 일대 다 파일 연결 체계를 용이하게합니다. 예를 들어 .htm, .html 및 .shtml 파일 형식을 모두 ProgID = htmlfile로 설정하면 단일 브라우저를 정의 할 수 있습니다. OTOH의 항목에는 여러 브라우저, 편집기 또는 기타 앱 목록에서 파일을 열기위한 여러 항목이있는 OpenWithList 또는 OpenWithProgID 하위 키가 포함될 수 있습니다.

HKLM \ Software \ Classes \와 HKCU \ Software \ Classes는 모두 같은 방식으로 작동합니다 (하나는 다른 것보다 우선합니다). 가장 간단한 형태의 파일 확장자 (예 : HKCR.txt)의 레지스트리 키가 있으며 기본값은 해당 ProgID (예 : txtfile)입니다. 기본값 외에 또는 대신에 "OpenWithProgID"하위 키에 대해 추가 ProgID 이름이 나열되고 (예 : txtfile 및 htmlfile) "OpenWithList"아래에 하위 키로 나타나는 추가 응용 프로그램 이름 (예 : Notepad ++ .exe, Opera.exe, Firefox.exe).

각 ProgID는 HKCR 내의 다른 키 (예 : HKCR \ txt 파일)에 정의되어 있습니다. 이 키에는 사용할 아이콘과 관련 파일 (예 : HKCR \ txtfile \ shell \ open \ command)을 여는 방법, 인쇄하는 방법, 인쇄 방법 등을 알려주는 하위 키가 있습니다. 마찬가지로 각 응용 프로그램 이름은 HKCR \ Applications 아래에 하위 키로 정의됩니다 (예 : HKEY_CLASSES_ROOT \ Applications \ Firefox.exe \ shell \ open \ command).

HKCU \ Software \ Classes 키 외에도 사용자 계정 파일 연결은 HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts 키에 있습니다. 이러한 항목은 제안 된대로 Windows 탐색기 용이 아니라 사용자 계정 파일 연결 재정의의 추가 소스입니다. 항목은 탐색기의 파일 연결 도구 (Explorer \ Tools \ Folder Options \ File Types)에 의해 작성되며 나열된 각 파일 확장자에 대한 OpenWithList 및 / 또는 OpenwithProgID 하위 키를 포함합니다.

파일 연결을 결정하기 위해 Windows는 먼저 해당 파일 확장자에 대한 HKCU 항목을 찾습니다. 하나를 찾지 못한 경우에만 HKLM 항목이 작동합니다. (참고 : HKCU \ Software \ Classes 또는 HKCU \ MIcrosoft \ Windows \ CurrentVersion \ Explorer \ FileExts를 우선적으로 테스트하지는 않았지만 FileExts 키가 될 것 같습니다.) 마찬가지로 참조 된 ProgID 또는 응용 프로그램 이름이 HKCU에 없으면 HKLM 항목이 검색됩니다. (\ Applications \ 항목은 일반적으로 디스크상의 실제 exe 파일 이름과 동일하더라도 임의의 이름입니다.)

특정 사용자 계정에 대한 파일 연결을 정의하려면 HKCU 하이브에 항목을 만드십시오. 모든 사용자에 대한 연관을 정의하려면 HKLM 하이브 (HKCR)에 항목을 작성하고 해당 파일 유형에 대한 HKCU 하이브의 모든 참조를 삭제하십시오. 분명히 레지스트리 키에 대한 적절한 액세스 권한이 필요합니다.

대화식 또는 배치 모드에서 RegEdit을 사용하는 것을 선호하므로 assoc 및 ftype 도구를 사용하지 않지만 다른 의견에서는 HKLM 하이브에서만 작동하며 HKCU 키를 지우거나 설정하는 데 쓸모없는 것으로 보입니다. 더 많은 예제를 보려면 시간이 걸리고 RegEdit을 사용하여 위에서 언급 한 키를 찾아보십시오.


HKCR은 생각한대로 작동하지 않습니다. HKCR에는 "소스 코드"항목이 있습니다. "소스 코드"가 HKLM \ Software \ Classes에 없습니다. 반면 HKCU \ Software \ Classes에는 "sourcecode"가 있습니다. 따라서 HKCR에는 HKCU \ Software \ Classes의 항목이 포함됩니다. 한편, HKCR과 HKLM에는 "SoundRec"과 "SPCFile"이 있습니다. 그러나 HKCU \ Software \ Classes에는 이러한 기능이 없습니다. 따라서 HKCR에는 분명히 HKLM의 항목도 포함됩니다. HKCR은 두 위치를 어떤 방식 으로든 합병하고 있습니다. 또한 superuser.com/a/266274
Ben
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.