Saya mengubah asosiasi untuk digunakan setelah meluncurkan .py
file, melalui Windows Explorer:
- Alat -> Folder -> Jenis file.
- Kemudian telusuri ke
.py
. - Ubah asosiasi ke Wordpad.
Sekarang ketika saya mengetik nama file py di baris perintah, Wordpad membukanya.
Tetapi assoc
dan ftype
di baris perintah masih mengembalikan yang berikut:
C:\> assoc .py
.py = Python.File
C:\> ftype Python.File
Python.File = "C:\Program\Python27\python.exe" "%1" %*
Kenapa asosiasi itu bekerja, tetapi assoc
dan ftype
tidak menyadarinya?
Saya memang me-restart prompt.
Info lebih lanjut dari registri saya:
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
Lebih banyak registry:
HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command\(Standard)
= "C:\Program\Python27\python.exe" "%1" %*`
Saya kira inilah yang muncul ftype Python.File
. Tapi sepertinya tidak terbiasa.
(Saya melakukan ini untuk pengujian, jadi saya akhirnya dapat memilih versi default Python saya dengan mudah).
windows-xp
file-association
Gauthier
sumber
sumber
Jawaban:
Tergantung pada bagaimana Anda memanggil file akan tergantung pada kata kerja apa yang digunakan. Kata kerja yang Anda gunakan menentukan apa yang akan dilakukan Windows dengan itu. Kata kerja standarnya adalah Open, Edit, Print, Play, dan Preview. Namun, dimungkinkan untuk membuat kata kerja Anda sendiri . Kata kerja yang paling umum ditambahkan adalah keluarga Open With (termasuk OpenWithProgIDs), yang menambahkan sub-menu konteks kecil di bawah "Open With" untuk memberikan Anda kemungkinan alternatif. Jika Anda menginstal Paint.NET, misalnya, dan kemudian klik kanan file .jpg, Anda akan melihat entri Open With memperluas ke submenu yang mencantumkan Paint.NET, Paint, dan apa pun yang disebut Microsoft penampil gambar untuk versi Anda. Windows.
Selain itu, apa yang dikatakan Laboratorium Kode Tanpa Tanda sangat penting. Saat Anda debug kelas, Anda perlu melihat
HKLM\Software\Classes\
danHKCU\Software\Classes
.HKCR
sangat berguna untuk menanyakan sistem, tetapi tidak begitu baik untuk mencari tahu mengapa itu terjadi kesalahan.Saya melakukan sedikit pengujian pada sistem Windows 7 saya dengan
procmon.exe
, dan perintahassoc
danftype
tampaknya mencoba menulis langsung keHKCR
, dan sistem tampaknya menafsirkan itu sebagai menulisHKLM
. Akun saya saat ini adalah anggota grup admin, tetapi UAC diaktifkan. Saya mendapat akses ditolak ketika saya mencobaassoc .mytest=MyTest.File
.Anehnya, jika saya membuat asosiasi dengan mengklik kanan file yang dipanggil
test.mytest
dan menghubungkannya dengan Notepad, tidakassoc
jugaftype
melihat asosiasi ini. Asosiasi pasti ada di sanaHKCU
danHKCR
. Saya belum mencoba me-reboot.sumber
saya tidak tahu bagaimana Anda bisa membuat kecocokan antara registri dan apa yang muncul di ftype dan assoc. Bagi saya dan seperti yang saya lihat, perintah ftype dan assoc tidak berguna. Apa yang saya lakukan untuk mengubah program default untuk ekstensi yang diberikan dalam cara yang terprogram (vs standar dan cara yang lebih sederhana menggunakan explorer) adalah memodifikasi kunci registri ini
Misalnya, jika saya ingin membuka mp3s saya dengan mplayer saya memasukkan
nilai "mplayerc.mp3"
Apa komplikasi dari melakukan ini: pertama Anda harus tahu valid ProgIDs (gunakan ftype), dan kedua Anda perlu akses tulis ke sarang itu. Windows secara otomatis menempatkan ACL penolakan untuk kunci UserChoice, jadi Anda perlu menemukan cara untuk menghapus aturan penolakan itu untuk mendapatkan akses tulis. Saya menggunakan subinacl program, yang dapat Anda unduh dari sini http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=en untuk mengubah izin. Anda juga dapat menggunakan program pihak ketiga SetACL. Saya merekomendasikan yang pertama karena sintaksnya jauh lebih sederhana.
sumber
Explorer (shell Windows) selalu memberikan preferensi ke aplikasi yang ditentukan dalam kunci vendor yang ditentukan di bawah nilai default ekstensi. (Dalam kasus Anda
.py
adalah ekstensi,Python.File
adalah kunci vendor.)ftype
danassoc
mungkin membaca nilainya dari daerah lain, saya tidak tahu pasti. Itulah bagaimana Explorer melakukannya.EDIT: Halaman ini mungkin menarik bagi Anda: MSDN - Jenis File
Terutama ini:
Mungkin di sinilah berbagai bagian Windows berbenturan, jika ada asosiasi "default" di HKEY_LOCAL_MACHINE, yang ditimpa oleh yang Anda tetapkan di akun Anda (yang kemudian akan disimpan di HKEY_CURRENT_USER).
sumber
Microsoft telah mengubah cara kerjanya dari Windows 8 dan seterusnya. Tidak lagi mungkin untuk mengedit registri untuk mengubah ini. Untuk mengutip Microsoft :
Cara Microsoft mengharapkan Anda untuk mengubah ini sekarang adalah dengan file xml yang diimplementasikan melalui Kebijakan Grup. Instruksi di sini .
Untungnya Christoph Kolbicz telah merekayasa balik algoritma hashing dan menciptakan alat yang disebut SetUserFTA untuk mengatur asosiasi tipe file. Sayangnya itu adalah sumber tertutup.
sumber
Kebingungan di sini adalah antara apa yang digunakan untuk membuka file dan apa yang digunakan untuk menjalankan file. Kunci registri
adalah apa yang memberitahu windows cara membuka file. Mengklik dua kali pada file tersebut akan membuka file dengan aplikasi ini.
Karena file tersebut bukan file yang dapat dieksekusi, baris perintah mengasumsikan bahwa Anda ingin membuka file dengan aplikasi default, seolah-olah Anda telah mengklik dua kali.
Mengubah asosiasi kembali ke C: \ Program \ Python27 \ python.exe atau mengedit kunci registri untuk menunjuk ke python harus mengembalikannya seperti semula, di mana windows menganggap Anda ingin membuka file dengan program default, yaitu python.exe, yang kemudian menjalankan program.
sumber
.py\Application
tersebut digunakan untuk membuka file py. Apa yang saya tidak mengerti adalah dalam kasus apa nilai dalamPython.File
digunakan.PATHEXT
variabel). Namun saya ingat pernah membaca di masa lalu bahwa rekanan yang dibuat dari dalam Explorer selalu menimpa yang dariClasses
kunci registri.Petunjuk terbesar Anda untuk tujuan dan lokasi adalah dalam "tipe besar", yaitu, nama-nama sarang masing-masing: HKLM dan HKCU
Asosiasi file diatur dalam kedua sarang dan memiliki dua tujuan berbeda:
Sesuai namanya, entri registri HKCU mengatur asosiasi file untuk PENGGUNA SAAT INI dan mengabaikan pengaturan jenis file yang sesuai di HKLM.
HKLM menetapkan asosiasi file untuk MESIN LOKAL, yaitu, untuk SEMUA PENGGUNA mesin (kecuali diganti oleh entri HKCU). (Untuk Win98, HKCR hanyalah alias singkat untuk Kelas HKLM \ Software \. Tidak ada sarang terpisah atau berbeda. Namun, ini berubah untuk Win XP dan tidak lagi benar. HKCR sekarang menjadi sarang virtual yang merupakan hasil penggabungan HKLM \ Software \ Classes \, HKCU \ Software \ Classes \, dan HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts kunci dengan info HKCU yang diutamakan.)
Sistem dua langkah ini memfasilitasi tidak hanya skema asosiasi file satu-ke-satu tetapi banyak-ke-satu dan satu-ke-banyak. Misalnya, filetipe .htm, .html, dan .shtml semuanya dapat diatur ke ProgID = htmlfile yang pada gilirannya dapat menentukan satu browser. OTOH, entri dapat berisi subkunci OpenWithList atau OpenWithProgID dengan beberapa entri untuk membuka file dari daftar beberapa browser, editor, atau aplikasi lain.
Kelas HKLM \ Software \ Classes dan HKCU \ Software \ beroperasi dengan cara yang sama (yang satu lebih diutamakan daripada yang lain). Dalam bentuk paling sederhana ada kunci registri untuk ekstensi file (misalnya, HKCR.txt) yang nilai defaultnya adalah ProgID yang sesuai (misalnya, txtfile). Selain, atau alih-alih, nilai default, mungkin ada nama ProgID tambahan yang tercantum untuk subkunci "OpenWithProgID" (mis., Txtfile dan htmlfile), dan / atau nama aplikasi tambahan yang muncul sebagai subkunci di bawah "OpenWithList" (mis. Notepad ++ .exe, Opera.exe, Firefox.exe).
Setiap ProgID didefinisikan pada kunci lain dalam HKCR (mis., HKCR \ txtfile). Kunci ini berisi subkunci untuk memberi tahu windows ikon mana yang akan digunakan dan cara membuka, mencetak, mencetak, dll file terkait (mis., G, perintah HKCR \ txtfile \ shell \ open \). Demikian pula, setiap nama aplikasi didefinisikan sebagai subkunci di bawah HKCR \ Applications (mis., HKEY_CLASSES_ROOT \ Applications \ Firefox.exe \ shell \ open \ command).
Selain kunci HKCU \ Software \ Classes, asosiasi file akun pengguna ditemukan di kunci HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts. Entri ini bukan hanya untuk Windows Explorer seperti yang telah disarankan tetapi merupakan sumber tambahan dari pengesampingan asosiasi file akun pengguna. Entri dibuat oleh alat asosiasi file di explorer (Explorer \ Tools \ Folder Options \ Jenis File) dan berisi OpenWithList dan / atau subkunci OpenwithProgID untuk setiap ekstensi file yang terdaftar.
Untuk menentukan hubungan file, Windows pertama-tama melihat entri HKCU untuk ekstensi file yang sesuai. Hanya jika tidak ditemukan entri HKLM ikut bermain. (Catatan: Saya belum menguji yang lebih diutamakan - HKCU \ Software \ Classes atau HKCU \ MIcrosoft \ Windows \ CurrentVersion \ Explorer \ FileExts tapi saya menduga itu akan menjadi kunci FileExts). Demikian juga, jika ProgID atau nama aplikasi yang dirujuk tidak ditemukan di HKCU, entri HKLM dicari. (Perhatikan bahwa entri \ Applications \ hanyalah nama yang arbitrer - meskipun biasanya identik dengan nama file exe disk sebenarnya.)
Jadi untuk menentukan asosiasi file untuk akun pengguna tertentu, buat entri dalam sarang HKCU. Untuk menentukan asosiasi untuk semua pengguna, buat entri di HKLM hive (HKCR) dan hapus semua referensi di HKCU hive untuk tipe file itu. Jelas Anda membutuhkan hak akses yang sesuai untuk kunci registri.
Saya tidak menggunakan alat assoc dan ftype karena saya lebih suka menggunakan RegEdit baik dalam mode interaktif atau batch tetapi dari komentar lain tampaknya mereka hanya beroperasi pada HKLM hive dan tidak berguna untuk membersihkan / mengatur kunci HKCU. Luangkan waktu dan telusuri kunci yang disebutkan di atas dengan RegEdit untuk melihat lebih banyak contoh.
sumber