如何讓 ftype 和 assoc 與 Windows 資源管理器相符?

如何讓 ftype 和 assoc 與 Windows 資源管理器相符?

我透過 Windows 資源管理器更改了啟動文件時要使用的關聯.py

  1. 工具 -> 資料夾 -> 檔案類型。
  2. 然後瀏覽到.py.
  3. 將關聯更改為寫字板。

現在,當我在命令列中輸入 py 檔案的名稱時,寫字板會打開它。

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 版本)。

答案1

取決於您如何呼叫檔案將取決於使用的​​動詞。您使用的動詞決定了 Windows 將如何處理它。標準動詞是「開啟」、「編輯」、「列印」、「播放」和「預覽」。然而,有可能創建自己的動詞。最常添加的動詞是與家人一起開放(包括 OpenWithProgIDs),它在「開啟方式」下新增了一個小上下文子選單,為您提供可能的替代方案。例如,如果您安裝Paint.NET,然後右鍵單擊.jpg 文件,您將看到「開啟方式」項目展開為子選單,其中列出了Paint.NET、Paint 以及Microsoft 為您的版本所稱的圖片檢視器Windows 的。

另外,Unsigned Code Labs 所說的非常重要。當您調試類別時,您需要查看HKLM\Software\Classes\HKCU\Software\ClassesHKCR對於查詢系統非常有用,但對於找出系統行為不當的原因不太好。

我在我的 Windows 7 系統上做了一些測試procmon.exe, 和assoc命令ftype似乎嘗試直接寫入HKCR,系統顯然將其解釋為寫入HKLM。我目前的帳戶是 admin 群組的成員,但啟用了 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來修改權限。您也可以使用第 3 方程式 SetACL。我推薦第一個,因為文法要簡單得多。

答案3

從 Windows 8 開始,Microsoft 改變了其工作方式。無法再透過編輯註冊表來更改此設定。到引用微軟:

在 Pre-Win 8 中,應用程式可以透過操作註冊表來設定檔案類型/協定的預設處理程序,這意味著您可以輕鬆地使用腳本或群組原則來操作註冊表。然而,在 Win 8 中,註冊表變更透過雜湊(每個使用者和應用程式唯一)進行驗證,該雜湊值可偵測應用程式的篡改。如果沒有有效的雜湊值,我們將忽略註冊表中的預設值。

Microsoft 希望您現在更改此設定的方式是使用透過群組原則實現的 xml 檔案。指示這裡

值得慶幸的是,Christoph Kolbicz 對哈希演算法進行了逆向工程,並創建了一個名為設定用戶FTA設定文件類型關聯。不幸的是它是閉源的。

答案4

這裡的混亂在於習慣之間打開一個文件及其用途跑步一份文件。註冊表鍵值

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

告訴 Windows 如何開啟該檔案。雙擊該檔案將使用此應用程式開啟該檔案。

由於該文件不是可執行文件,因此命令列假定您要使用預設應用程式開啟該文件,就像雙擊它一樣。

將關聯更改回 C:\Program\Python27\python.exe 或編輯註冊表項以指向 python 應將其恢復到先前的狀態,其中 Windows 假定您要使用預設程式開啟該文件,即python.exe,然後執行該程式。

相關內容