ฉันจะได้รับ ftype & assoc เพื่อให้ตรงกับ Windows Explorer ได้อย่างไร


20

ฉันเปลี่ยนการเชื่อมโยงเพื่อใช้เมื่อเปิด.pyไฟล์ผ่าน Windows Explorer:

  1. เครื่องมือ -> โฟลเดอร์ -> ประเภทไฟล์
  2. .pyจากนั้นเรียกดู
  3. เปลี่ยนความสัมพันธ์เป็น Wordpad

ตอนนี้เมื่อฉันพิมพ์ชื่อไฟล์ py ในบรรทัดคำสั่ง Wordpad จะเปิดขึ้นมา

แต่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 เวอร์ชันเริ่มต้นของฉันได้อย่างง่ายดาย)


คำตอบ:


9

ขึ้นอยู่กับวิธีที่คุณเรียกไฟล์จะขึ้นอยู่กับกริยาที่ใช้ คำกริยาที่คุณใช้กำหนดว่า Windows จะทำอะไรกับมัน คำกริยามาตรฐานคือ Open, Edit, Print, Play และ Preview แต่ก็เป็นไปได้ที่จะสร้างคำกริยาของคุณเอง คำกริยาที่เพิ่มเข้ามามากที่สุดคือOpen With family (รวมถึง OpenWithProgIDs) ซึ่งเพิ่มเมนูย่อยบริบทเล็ก ๆ ภายใต้ "Open With" เพื่อให้คุณมีทางเลือกที่เป็นไปได้ ตัวอย่างเช่นหากคุณติดตั้ง Paint.NET แล้วคลิกขวาที่ไฟล์. jpg คุณจะเห็นรายการ Open With ขยายเป็นเมนูย่อยที่แสดงรายการ Paint.NET, Paint และสิ่งอื่น ๆ ที่ Microsoft เรียกว่าโปรแกรมดูรูปภาพสำหรับรุ่นของคุณ ของ Windows

นอกจากนี้แล็บโค้ดที่ไม่ได้ลงนามกล่าวว่ามีความสำคัญมาก เมื่อคุณแก้จุดบกพร่องเรียนคุณจะต้องดูและ HKLM\Software\Classes\ มีประโยชน์มากสำหรับการสืบค้นระบบ แต่ไม่ค่อยดีสำหรับการค้นหาสาเหตุที่ทำให้ระบบทำงานผิดปกติHKCU\Software\ClassesHKCR

ผมทดสอบเล็ก ๆ น้อย ๆ บนระบบ Windows 7 ของฉันกับprocmon.exeและassocและftypeคำสั่งปรากฏว่าพยายามที่จะเขียนโดยตรงไปและระบบจะเห็นได้ชัดว่าตีความว่าเขียนถึงHKCR HKLMบัญชีปัจจุบันของฉันเป็นสมาชิกของกลุ่มผู้ดูแล แต่เปิดใช้งาน UAC assoc .mytest=MyTest.Fileผมได้รับการเข้าถึงถูกปฏิเสธเมื่อฉันพยายาม

ถ้าฉันสร้างการเชื่อมโยงโดยการคลิกขวาที่ไฟล์ชื่อtest.mytestและเชื่อมโยงกับ Notepad ไม่เห็นassocหรือไม่ftypeเห็นความสัมพันธ์นี้ สมาคมมีอยู่ในHKCUและHKCRแน่นอน อย่างไรก็ตามฉันไม่ได้พยายามรีบูตเครื่อง



@ TheIncorrential1 ลิงก์ตาย :(
DaveInCaz

@DaveInCaz โอ้มันเศร้าจริงๆ ฉันรำคาญที่พวกเขาทำผิดลิงค์ MSFT ทั้งหมด ฉันจะดูว่าฉันสามารถกู้คืนได้หรือไม่ หวังว่ามันจะมีลิงค์ใหม่และไม่ได้หายไป (อย่างเช่นในกรณีอื่น ๆ )
TheIncorrential1


5

ฉันไม่รู้ว่าคุณจะจับคู่ระหว่างรีจิสตรีกับอะไรได้บ้างใน ftype และ assoc สำหรับฉันและอย่างที่ฉันเห็นคุณเช่นกันคำสั่ง ftype และ assoc ไร้ประโยชน์ สิ่งที่ฉันทำเพื่อเปลี่ยนโปรแกรมเริ่มต้นสำหรับส่วนขยายที่กำหนดในทางโปรแกรม (เทียบกับมาตรฐานและวิธีที่ง่ายขึ้นโดยใช้ explorer) คือการปรับเปลี่ยนรีจิสทรีคีย์นี้

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

ตัวอย่างเช่นถ้าฉันต้องการเปิด mp3 ของฉันด้วย mplayer ฉันใส่

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

ค่าของ "mplayerc.mp3"

อะไรคือความยุ่งยากในการทำสิ่งนี้: ก่อนอื่นคุณต้องรู้จัก valids ProgID (ใช้ ftype) และสิ่งที่คุณต้องเขียนเพื่อเข้าถึงกลุ่มนั้น Windows จะใส่ ACL ที่ปฏิเสธให้กับคีย์ UserChoice โดยอัตโนมัติดังนั้นคุณต้องหาวิธีในการลบกฎที่ถูกปฏิเสธนั้นออกเพื่อให้สามารถเข้าถึงการเขียนได้ ผมใช้ subinacl โปรแกรมที่คุณสามารถดาวน์โหลดได้จากที่นี่http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=enเพื่อปรับเปลี่ยนสิทธิ์ นอกจากนี้คุณสามารถใช้โปรแกรมบุคคลที่สาม SetACL ฉันขอแนะนำครั้งแรกเพราะไวยากรณ์ง่ายขึ้นมาก


3

Explorer (เชลล์ Windows) ให้การตั้งค่าแอพพลิเคชั่นที่ระบุในรหัสผู้จำหน่ายซึ่งจะระบุไว้ภายใต้ค่าเริ่มต้นของส่วนขยายเสมอ (ในกรณีของคุณ.pyคือส่วนขยายPython.Fileเป็นรหัสผู้ขาย)

ftypeและassocอาจอ่านค่าของพวกเขาจากพื้นที่อื่น ๆ ฉันไม่ทราบแน่นอน นั่นเป็นเพียงวิธีที่ Explorer ทำ

แก้ไข:หน้านี้อาจเป็นที่สนใจของคุณ: MSDN - ประเภทไฟล์

โดยเฉพาะอย่างยิ่งสิ่งนี้:

ทรีย่อยของ HKEY_CLASSES_ROOT เป็นมุมมองที่เกิดขึ้นจากการรวม HKEY_CURRENT_USER \ Software \ Classes และ HKEY_LOCAL_MACHINE \ Software \ Classes

บางทีนี่อาจเป็นที่ส่วนต่าง ๆ ของการปะทะกันของ Windows หากมีการเชื่อมโยง "ค่าเริ่มต้น" ใน HKEY_LOCAL_MACHINE ซึ่งจะถูกแทนที่โดยส่วนที่คุณกำหนดไว้ในบัญชีของคุณ (ซึ่งจะถูกเก็บไว้ใน HKEY_CURRENT_USER)


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

เป็นสิ่งที่บอก windows ถึงวิธีการเปิดไฟล์ การดับเบิลคลิกที่ไฟล์จะเป็นการเปิดไฟล์ด้วยแอพพลิเคชั่นนี้

เนื่องจากไฟล์ไม่ใช่ไฟล์ที่ใช้งานได้บรรทัดคำสั่งจะถือว่าคุณต้องการเปิดไฟล์ด้วยแอปพลิเคชั่นเริ่มต้นราวกับว่าคุณคลิกสองครั้ง

การเปลี่ยนการเชื่อมโยงกลับไปเป็น C: \ Program \ Python27 \ python.exe หรือการแก้ไขรีจิสตรีคีย์ให้ชี้ไปที่ไพ ธ อนควรกลับไปเป็นแบบที่เคยเป็นมาโดยที่ windows ถือว่าคุณต้องการเปิดไฟล์ด้วยโปรแกรมเริ่มต้นซึ่งก็คือ python.exe ซึ่งรันโปรแกรม


หากฉันเข้าใจถูกต้องรหัส.py\Applicationจะถูกใช้เพื่อเปิดไฟล์ py สิ่งที่ผมไม่เข้าใจคือสิ่งที่อยู่ในกรณีค่าในการPython.Fileถูกนำมาใช้
Gauthier

ตาม Majenko มันขึ้นอยู่กับสภาพอากาศที่กำหนดนามสกุลได้รับการปฏิบัติโดย Windows เช่นปฏิบัติการ (ดูPATHEXTตัวแปร) อย่างไรก็ตามฉันจำการอ่านในอดีตที่ผู้ร่วมงานที่ทำจากภายใน Explorer มักจะเขียนทับสิ่งเหล่านั้นจากClassesคีย์รีจิสทรี
Piotr Dobrogost

1

เงื่อนงำที่ใหญ่ที่สุดของคุณเพื่อวัตถุประสงค์และสถานที่ตั้งอยู่ใน "ประเภทใหญ่" เช่นชื่อของลมพิษนั้น: HKLM และ HKCU

การเชื่อมโยงไฟล์ถูกตั้งค่าในลมพิษทั้งสองและมีวัตถุประสงค์ที่แตกต่างกันสองประการ:

ตามชื่อหมายถึงรายการรีจิสทรี HKCU จะตั้งค่าการเชื่อมโยงไฟล์สำหรับ CURRENT USER และแทนที่การตั้งค่าประเภทไฟล์ที่เกี่ยวข้องใน HKLM

HKLM ตั้งค่าการเชื่อมโยงไฟล์สำหรับ LOCAL MACHINE เช่นสำหรับผู้ใช้ทั้งหมดของเครื่อง (เว้นแต่จะถูกแทนที่ด้วยรายการ HKCU) (สำหรับ Win98, HKCR เป็นเพียงนามแฝงสำหรับ HKLM \ Software \ Classes พวกเขาไม่ได้แยกจากกันหรือเป็นลมพิษที่แตกต่างกันอย่างไรก็ตามสิ่งนี้เปลี่ยนไปสำหรับ Win XP และไม่เป็นความจริงอีกต่อไปตอนนี้ HKCR เป็นเสมือนกลุ่มที่เป็นผลมาจากการรวม คีย์ HKLM \ Software \ Classes \, HKCU \ Software \ Classes \, และ HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts คีย์พร้อมกับข้อมูล HKCU ที่มีความสำคัญกว่า)

ระบบสองขั้นตอนนี้ไม่เพียงช่วยอำนวยความสะดวกในการเชื่อมต่อไฟล์แบบหนึ่งต่อหนึ่งเท่านั้น ตัวอย่างเช่น. htm, .html และ. shtml filetypes สามารถตั้งค่าเป็น ProgID = htmlfile ซึ่งสามารถกำหนดเบราว์เซอร์เดียวได้ OTOH รายการอาจมีคีย์ย่อยของ OpenWithList หรือ OpenWithProgID ที่มีหลายรายการเพื่อเปิดไฟล์จากรายการเบราว์เซอร์หลาย ๆ ตัวแก้ไขหรือแอพอื่น ๆ

ทั้ง HKLM \ Software \ Classes \ และ HKCU \ Software \ Classes ทำงานในลักษณะเดียวกัน (อันแรกมีความสำคัญมากกว่าอีกอัน) ในรูปแบบที่ง่ายที่สุดจะมีรีจิสตรีคีย์สำหรับนามสกุลไฟล์ (เช่น HKCR.txt) ซึ่งมีค่าเริ่มต้นคือ ProgID ที่สอดคล้องกัน (เช่น txtfile) นอกจากหรือแทนค่าเริ่มต้นอาจมีชื่อ ProgID เพิ่มเติมที่ระบุไว้สำหรับคีย์ย่อย "OpenWithProgID" (เช่น txtfile และ htmlfile) และ / หรือชื่อแอปพลิเคชันเพิ่มเติมปรากฏเป็นคีย์ย่อยภายใต้ "OpenWithList" (เช่น Notepad ++ .exe, Opera.exe, Firefox.exe)

ProgID แต่ละรายการจะถูกกำหนดในคีย์อื่นภายใน HKCR (เช่น HKCR \ txtfile) คีย์นี้ประกอบด้วยคีย์ย่อยเพื่อบอก windows ว่าไอคอนใดที่จะใช้และวิธีการเปิดพิมพ์ปริ้นไฟล์ที่เกี่ยวข้อง ฯลฯ (เช่น, g, 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 เท่านั้นตามที่ได้รับการแนะนำ แต่เป็นแหล่งเพิ่มเติมของการแทนที่การเชื่อมโยงไฟล์บัญชีผู้ใช้ รายการถูกสร้างขึ้นโดยเครื่องมือการเชื่อมโยงไฟล์ใน explorer (Explorer \ Tools \ Folder Options \ File Type) และมี OpenWithList และ / หรือคีย์ย่อย OpenwithProgID สำหรับแต่ละนามสกุลไฟล์ที่ระบุ

ในการพิจารณาความสัมพันธ์ของไฟล์ Windows จะพิจารณารายการ HKCU เป็นอันดับแรกสำหรับส่วนขยายไฟล์ที่เกี่ยวข้อง หากไม่มีใครพบรายการ HKLM จะเข้าสู่การเล่น (หมายเหตุ: ฉันยังไม่ได้ทดสอบที่มีความสำคัญกว่า - HKCU \ Software \ Classes หรือ HKCU \ MIcrosoft \ Windows \ CurrentVersion \ Explorer \ FileExts แต่ฉันสงสัยว่ามันจะเป็นคีย์ FileExts) หากไม่พบ ProgID หรือชื่อแอปพลิเคชันที่อ้างอิงใน HKCU รายการ HKLM จะถูกค้นหา (โปรดทราบว่า \ Applications \ รายการเป็นเพียงชื่อโดยพลการ - แม้ว่าโดยทั่วไปแล้วจะเหมือนกับชื่อจริงในชื่อไฟล์ exe ดิสก์)

ดังนั้นในการกำหนดการเชื่อมโยงไฟล์สำหรับบัญชีผู้ใช้ที่เฉพาะเจาะจงให้สร้างรายการใน HKCU กลุ่ม หากต้องการกำหนดความสัมพันธ์สำหรับผู้ใช้ทั้งหมดให้สร้างรายการใน HKLM hive (HKCR) และลบการอ้างอิงทั้งหมดในกลุ่ม HKCU กับประเภทไฟล์นั้น เห็นได้ชัดว่าคุณต้องการสิทธิ์การเข้าถึงที่เหมาะสมกับรีจิสตรีคีย์

ฉันไม่ได้ใช้เครื่องมือ assoc และ ftype ตามที่ฉันต้องการใช้ RegEdit ในโหมดแบบโต้ตอบหรือแบบแบ็ต แต่จากความคิดเห็นอื่น ๆ ปรากฏว่าพวกเขาทำงานบนรังผึ้ง HKLM เท่านั้นและไม่มีประโยชน์สำหรับการล้าง / ตั้งค่าปุ่ม HKCU ใช้เวลาสักครู่และเรียกดูคีย์ข้างต้นด้วย RegEdit เพื่อดูตัวอย่างเพิ่มเติม


HKCR ไม่ทำงานอย่างที่คุณคิด ใน HKCR ฉันมีรายการ "sourcecode" "sourcecode" ไม่มีอยู่ใน 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.