Windows Gezgini ile eşleşmek için nasıl ftype & assoc alırım?


20

Bir .pydosyayı başlatırken kullanacağım ilişkiyi Windows Gezgini üzerinden değiştirdim:

  1. Araçlar -> Klasörler -> Dosya türleri.
  2. Sonra göz atın .py.
  3. İlişkilendirmeyi Wordpad olarak değiştirin.

Şimdi bir py dosyasının adını komut satırına yazdığımda Wordpad açıyor.

Ancak assocve ftypekomut satırında hala aşağıdakileri döndürür:

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

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

Nasıl dernek çalışıyor gelir fakat assocve ftypebunun farkında değil mi?

İstemi yeniden başlattım.


Kayıt defterimden daha fazla bilgi:

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

Daha fazla kayıt defteri:

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

Sanırım bu ortaya çıkıyor ftype Python.File. Fakat alışmış gibi görünmüyor.


(Bunu test için yapıyorum, bu yüzden sonunda varsayılan Python sürümünü kolayca seçebiliyorum).


Yanıtlar:


9

Bir dosyayı nasıl aradığınıza bağlı olarak, hangi fiilin kullanıldığına bağlı olacaktır. Kullandığınız fiil, Windows'un bununla ne yapacağını belirler. Standart fiiller; Aç, Düzenle, Yazdır, Oynat ve Önizleme'dir. Ancak, kendi fiillerinizi oluşturmak mümkündür . En çok kullanılan fiil, "Birlikte Aç" altındaki bu küçük bağlam alt menüsünü ekleyen "Açık Birlikte" (OpenWithProgID'ler dahil) ailesidir . Örneğin, Paint.NET'i yükler ve ardından bir .jpg dosyasını sağ tıklarsanız, Birlikte Aç girişinin Paint.NET, Paint ve Microsoft'un sürümünüz için resim görüntüleyici olarak adlandırdığı her şeyi listeleyen bir alt menüye genişlediğini görürsünüz. Windows'un

Ek olarak, İmzasız Kod Laboratuarlarının söyledikleri çok önemlidir. Sınıfları ayıklarken, HKLM\Software\Classes\ve ' ya bakmanız gerekir HKCU\Software\Classes. HKCRsistemi sorgulamak için çok kullanışlıdır, ancak neden yanlış davrandığını bulmak için iyi değildir.

Windows 7 sistemimde küçük bir test yaptım procmon.exeve assocve ftypekomutları doğrudan yazmaya çalışıyor gibi görünüyor HKCRve sistem görünüşte bunu yazarken yorumluyor HKLM. Mevcut hesabım admin grubunun bir üyesi, ancak UAC etkin. Denemeye başladığımda erişimim reddedildi assoc .mytest=MyTest.File.

İşin garibi, bir dosyayı sağ tıklayıp test.mytestNot Defteri ile ilişkilendirerek bir ilişkilendirme oluşturursam , bu ilişkiyi assocde ftypegörmezsiniz. Dernek kesinlikle HKCUve orada HKCR. Ancak yeniden başlatmayı denemedim.



@ TheIncorrigible1 bağlantısı öldü :(
DaveInCaz

@DaveInCaz Oh, gerçekten üzücü. Tüm MSFT blog bağlantılarını kırdıklarından rahatsızım. Onu geri yükleyebilir miyim göreceğim; umarım sadece yeni bir bağlantısı vardır ve yok olmamıştır (başka şeyler için olduğu gibi)
TheIncorrigible1


5

Kayıt ile ftype ve assoc'da görünenlerle eşleşmeyi nasıl başarabilirim bilmiyorum. Bana göre ve gördüğüm kadarıyla ftype ve assoc komutu da işe yaramaz. Belirli bir uzantı için varsayılan programı programlı bir şekilde değiştirmek için yaptığım şeyi (vs explorer'ı kullanarak standart ve daha basit bir şekilde) bu kayıt defteri anahtarını değiştirmek

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

Mesela mp3lerimi mplayer ile açmak istersem içine koydum

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

"mplayerc.mp3" değeri

Bunu yapmanın karmaşıklığı nedir: İlk önce Bilmeniz Gerekenler ProgIDs (ftype kullanın) ve ikinci olarak da bu kovana yazabilmeniz gerekir. Windows, UserChoice anahtarı için otomatik olarak reddetme ACL'si koyar; bu nedenle yazma erişimine erişmek için bu reddetme kuralını kaldırmanın bir yolunu bulmanız gerekir. Ben buradan indirebilirsiniz verebilecek, programın subinacl kullanmak http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=en izinlerini değiştirmek için. Ayrıca 3. parti programı SetACL kullanabilirsiniz. İlkini öneririm çünkü sentaks çok daha basit.


3

Explorer (Windows kabuğu) her zaman, uzantının varsayılan değeri altında belirtilen satıcı anahtarında belirtilen uygulamayı tercih eder. (Sizin durumunuzda .pyuzantı, Python.Filesatıcı anahtarıdır.)

ftypeve assocdiğer alanlardan kendi değerlerini okuyabilir, emin değilim. Sadece Explorer böyle yapar.

EDIT: Bu sayfa ilginizi çekebilir: MSDN - Dosya Türleri

Özellikle bu:

HKEY_CLASSES_ROOT alt ağacı, HKEY_CURRENT_USER \ Software \ Classes ve HKEY_LOCAL_MACHINE \ Software \ Classes birleştirilerek oluşturulan bir görünümdür .

Muhtemelen bu, Windows’un farklı bölümlerinin çakıştığı yerdir, HKEY_LOCAL_MACHINE’da "varsayılan" bir ilişki varsa, hesabınızda tanımladığınız kişi tarafından geçersiz kılınır (daha sonra HKEY_CURRENT_USER içinde saklanır).


3

Microsoft bunun Windows 8'den itibaren nasıl çalıştığını değiştirdi. Bunu değiştirmek için kayıt defterini düzenlemek artık mümkün değil. Microsoft'a alıntı yapmak için :

Win 8 öncesi, uygulamalar kayıt defterini düzenleyerek bir dosya türü / protokolü için varsayılan işleyici ayarlayabilir, bu da kayıt defterini değiştiren bir komut dosyası veya grup ilkesine kolayca sahip olabileceğiniz anlamına gelir. Ancak, Win 8'de kayıt defteri değişiklikleri, uygulamalar tarafından yapılan kurcalamayı algılayan karma (kullanıcı ve uygulama başına benzersiz) ile doğrulanır. Geçerli bir karma olmadığında, kayıt defterindeki temsili yok sayıyoruz.

Microsoft'un bunu şimdi değiştirmenizi beklediği yol, Grup İlkesi aracılığıyla uygulanan bir xml dosyasıdır. Buradaki talimatlar .

Neyse ki Christoph Kolbicz karma algoritmayı tersine çevirdi ve adında bir araç yarattı. çevirdi ve dosya türü birliğini ayarlamak için SetUserFTA . Ne yazık ki kapalı kaynaktır.


SetUserFTA süper kullanışlıdır ve kodlanabilir.
DaveInCaz

1

Buradaki karışıklık, bir dosyayı açmak için kullanılan ile ne için kullanılan bir dosyayı çalıştırmak için . Kayıt defteri anahtarı

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

Windows’a dosyayı nasıl açacağını Dosyaya çift tıklamak, dosyayı bu uygulamayla açacaktır.

Dosya çalıştırılabilir bir dosya olmadığından komut satırı, dosyayı çift tıklamış gibi varsayılan uygulama ile açmak istediğinizi varsayar.

İlişkiyi tekrar C: \ Program \ Python27 \ python.exe olarak değiştirmek veya kayıt defteri anahtarını python'a işaret etmek için düzenlemek, eskiden olduğu gibi, pencerelerin dosyayı varsayılan programla açmak istediğinizi varsayar. Daha sonra programı çalıştıran python.exe.


Doğru .py\Applicationanlarsam, py dosyalarını açmak için anahtar kullanılır. Anlamadığım, hangi durumlarda hangi değerin Python.Filekullanıldığı.
Gauthier

Majenko'ya göre, verilen hava, Windows tarafından çalıştırılabilir gibi işlem görür ( PATHEXTdeğişkene bakınız ). Bununla birlikte, geçmişte Explorer'dan yapılan ortakların Classeskayıt defteri anahtarındakilerin üzerine yazdıklarını okudum .
Piotr Dobrogost

1

Amaç ve konumla ilgili en büyük ipucunuz "büyük tip" yani ilgili kovanların isimleridir: HKLM ve HKCU

Dosya ilişkileri her iki kovana da yerleştirilmiş ve iki farklı amacı var:

Adından da anlaşılacağı gibi, HKCU kayıt defteri girdileri, CURRENT USER için dosya ilişkilendirmelerini ayarladı ve HKLM'deki karşılık gelen dosya türü ayarlarını geçersiz kıldı.

HKLM, YEREL MAKİNE için, yani makinenin TÜM KULLANICILARI için (HKCU girişleri tarafından geçersiz kılınmazsa) dosya ilişkilerini ayarlar. (Win98 için HKCR, HKLM \ Software \ Classes için kısa yoldan bir takma addı. Ayrı veya farklı kovanlar değildi. Ancak, bu, Win XP için değişti ve artık doğru değil. HKCR, birleşme sonucu ortaya çıkan sanal bir kovan HKLM \ Software \ Classes \, HKCU \ Software \ Classes \ ve HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts tuşları, HKCU bilgisi öncelikli olarak alınır.)

Bu iki aşamalı sistem sadece bire bir değil, bire bir ve bire çok dosya birliği şemalarını da kolaylaştırıyor. Örneğin, .htm, .html ve .shtml fileto türlerinin tümü ProgID = htmlfile olarak ayarlanabilir ve bu da tek bir tarayıcı tanımlayabilir. OTOH'da, girişler bir dosyayı birden çok tarayıcı, editör veya başka uygulama listesinden açmak için birden fazla girişli OpenWithList veya OpenWithProgID alt anahtarları içerebilir.

Hem HKLM \ Yazılım \ Sınıflar \ hem de HKCU \ Yazılım \ Sınıflar aynı şekilde çalışır (biri diğerinden önceliklidir). En basit biçimde, varsayılan değeri karşılık gelen ProgID (örneğin, txtfile) olan bir dosya uzantısı (örneğin, HKCR.txt) için bir kayıt defteri anahtarı vardır. Varsayılan değere ek olarak veya bunun yerine, "OpenWithProgID" alt anahtarı (örneğin, txtfile ve htmlfile) için listelenen ilave ProgID adları ve / veya "OpenWithList" (örneğin, Notepad ++) altında alt anahtar olarak görünen ek uygulama adları olabilir. .exe, Opera.exe, Firefox.exe).

Her ProgID, HKCR içindeki başka bir anahtarda tanımlanmıştır (örneğin, HKCR \ txtfile). Bu anahtar, hangi simgenin kullanılacağını ve ilgili dosyayı nasıl açacağınızı, yazdıracağınızı, yazdıracağınızı, vb. Benzer şekilde, her uygulama adı HKCR \ Applications altında bir alt anahtar olarak tanımlanır (örneğin, HKEY_CLASSES_ROOT \ Applications \ Firefox.exe \ shell \ open \ command).

HKCU \ Software \ Classes anahtarına ek olarak, kullanıcı hesabı dosya ilişkilendirmeleri HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts anahtarında bulunur. Bu girişler yalnızca Windows Gezgini için önerildiği gibi değil, aynı zamanda bir kullanıcı hesabı dosya ilişkilendirme geçersiz kılma ek kaynağıdır. Girişler, Explorer'daki dosya ilişkilendirme araçları tarafından yaratılır (Explorer \ Tools \ Folder Options \ File Types) ve listelenen her dosya uzantısı için bir OpenWithList ve / veya bir OpenwithProgID alt anahtarı içerir.

Bir dosya ilişkisini belirlemek için, Windows önce karşılık gelen bir dosya uzantısı için HKCU girişlerine bakar. Sadece bir tane bulunamazsa, HKLM girişleri devreye girer. (Not: Önceliği test etmedim - HKCU \ Software \ Classes veya HKCU \ MIcrosoft \ Windows \ CurrentVersion \ Explorer \ FileExts ama FileExts anahtarının olacağından şüpheleniyorum). Benzer şekilde, başvurulan bir ProgID veya uygulama adı HKCU'da bulunmazsa, HKLM girişleri aranır. (\ Applications \ input'larının sadece rasgele bir ad olduğunu unutmayın - tipik olarak diskteki exe dosya adı ile aynı olsalar bile.)

Bu nedenle, belirli bir kullanıcı hesabı için bir dosya ilişkilendirmesi tanımlamak için HKCU kovanında girişler oluşturun. Tüm kullanıcılar için bir ilişki tanımlamak için, HKLM kovanında (HKCR) girişler oluşturun ve HKCU kovanındaki tüm başvuruları bu dosya türüne göre silin. Açıkçası kayıt defteri anahtarlarına uygun erişim haklarına ihtiyacınız var.

RegEdit'i interaktif veya toplu modda kullanmayı tercih ettiğim gibi assoc ve ftype araçlarını kullanmıyorum, ancak diğer yorumlardan sadece HKLM kovanında çalıştıkları ve HKCU anahtarlarını temizlemek / ayarlamak için yararsız oldukları görülüyor. Biraz zaman ayırın ve daha fazla örnek görmek için yukarıda belirtilen anahtarlara RegEdit ile göz atın.


HKCR düşündüğünüz gibi çalışmıyor. HKCR'da "kaynak kod" girdisine sahibim. "kaynak kod" HKLM \ Software \ Classes içinde mevcut değil. Öte yandan, HKCU \ Software \ Classes'ta "sourcecode" var. Yani, açıkçası HKCR, HKCU \ Software \ Classes'dan girdiler içermektedir. Öte yandan, hem HKCR hem de HKLM'de "SoundRec" ve "SPCFile" bulunmaktadır. Ancak HKCU \ Software \ Classes bunlara sahip değildir. Bu nedenle, HKCR ayrıca açıkça HKLM'den girdiler içermektedir. HKCR kesinlikle bu iki yeri bir şekilde birleştiriyor. Ayrıca bkz superuser.com/a/266274
Ben
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.